zoukankan      html  css  js  c++  java
  • 2015-09-09 [一点资讯]--数据抓取和处理工程师--1面

    时间:2015-09-09 10:00 ~ 11:00

    地点:北京市海淀区王庄路1号 清华同方科技广场D座 西区 7层

    1. 实现链表加法

    链接:https://github.com/loverszhaokai/ALG/blob/master/src/add_long.cc

    两次反转。

    // Reverse a list
    // E.g. 1->2->3 after reverse is: 3->2->1
    static ListNode *reverse(ListNode *head)
    {
        ListNode *pre_node = NULL, *next_node;
    
        while (head) {
    
            next_node = head->next;
    
            head->next = pre_node;
    
            pre_node = head;
    
            head = next_node;
    
        }
    
        return pre_node;
    }
    
    ListNode *add_long(ListNode *head1, ListNode *head2)
    {
        if (head1 == NULL && head2 == NULL)
            return NULL;
    
        // Reverse head1 and head2
        head1 = reverse(head1);
        head2 = reverse(head2);
    
        ListNode *orig_head1 = head1;
        ListNode *orig_head2 = head2;
    
        ListNode pseudo_head(0); // pseudo_head.next is the real head
        ListNode *pre_node = &pseudo_head;
        ListNode *node;
        int carry = 0;
    
        while (head1 && head2) {
    
            carry += head1->val + head2->val;
    
            node = new ListNode(carry % 10);
    
            carry /= 10;
            pre_node->next = node;
            pre_node = node;
    
            head1 = head1->next;
            head2 = head2->next;
        }
    
        while (head1) {
    
            carry += head1->val;
    
            node = new ListNode(carry % 10);
    
            carry /= 10;
            pre_node->next = node;
            pre_node = node;
    
            head1 = head1->next;
        }
    
        while (head2) {
    
            carry += head2->val;
    
            node = new ListNode(carry % 10);
    
            carry /= 10;
            pre_node->next = node;
            pre_node = node;
    
            head2 = head2->next;
        }
    
        if (carry != 0) {
    
            node = new ListNode(carry % 10);
            pre_node->next = node;
        }
    
        // Reverse head1 and head2
        reverse(orig_head1);
        reverse(orig_head2);
    
        // pseudo_head.next is the real head
        return reverse(pseudo_head.next);
    }

    2. 查找最长非重复字符创的长度

    #include <cmath>
    #include <iostream>
    #include <iomanip>
    #include <string>
    
    using namespace std;
    
    // The string pstr points to only contain 0~9 and a~z
    // Return the length of the longest non repeat characters
    //
    // E.g.
    // pstr = aefgsasdw
    //        ^    ^
    // The longest non repeat characters is "aefgs", so it should return 5
    //
    int longest_non_repeat_characters(const char *pstr)
    {
        int index[256];
    
        for (int iii = 0; iii < sizeof(index) / sizeof(int); iii++)
            index[iii] = -1;
    
        int ans = 0;
        int start = 0, cnt_pos = 0, end, len;
    
        const char *str = pstr;
        while (*str) {
    
            if (index[*str] != -1) {
    
                ans = max(ans, cnt_pos - start);
    
                end = index[*str];
                // Update start to end inclusive
                for (int iii = start; iii <= end; iii++)
                    index[ pstr[iii] ] = -1;
    
                start = end + 1;
    
            }
    
            index[*str] = cnt_pos++;
            str++;
        }
    
        ans = max(ans, cnt_pos - start);
    
        return ans;
    }
    
    int main()
    {
        const struct TestCase {
            const char *str;
            int ret;
        } test_cases[] = {
            { "", 0 },
            { "abc", 3 },
            { "abca", 3 },
            { "xyzafegsahkbacbst", 8 },
        };
    
        for (int iii = 0; iii < sizeof(test_cases) / sizeof(TestCase); iii++) {
            const TestCase &tc = test_cases[iii];
    
            if (tc.ret != longest_non_repeat_characters(tc.str)) {
                cout << "Case #" << iii << ": FAILED" <<  endl;
            }
    
        }
    
        return 0;
    }
  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/lovers/p/4797702.html
Copyright © 2011-2022 走看看