2015-09-09 [一点资讯]--数据抓取和处理工程师--4面

时间:2015-09-09 14:40 ~ 15:40

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

1. 问项目经验和看过什么书

2. 有3N+1个整数,其中只有一个数出现了一次,其它的数都出现了3次,查找唯一出现一次的那个数。

https://leetcode.com/problems/single-number-ii/

https://github.com/loverszhaokai/leetcode/blob/master/137_no/sol_bit_manipulation.cc

#include <climits>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>

using namespace std;

int find(const vector<int> &nums)
{
    int count[32];

    for (int iii = 0; iii < sizeof(count) / sizeof(int); iii++)
        count[iii] = 0;

    for (int iii = 0; iii < nums.size(); iii++) {

        int jjj = 1;
        int kkk = 1;

        while (jjj <= 32) {

            if (nums[iii] & kkk)
                count[jjj - 1] = (count[jjj - 1] + 1) % 3;

            kkk <<= 1;
            jjj++;
        }
    }

    int ans = 0;
    int jjj = 1;

    for (int iii = 0; iii < sizeof(count) / sizeof(int); iii++) {

        if (count[iii])
            ans |= jjj;

        jjj <<= 1;
    }

    return ans;
}

// Use two integer instead of count[32]
// 0 0 -> 0
// 0 1 -> 1
// 1 0 -> 2
//
int find2(const vector<int> &nums)
{
    int high = 0;
    int low = 0;

    for (int iii = 0; iii < nums.size(); iii++) {

        int jjj = 1;
        int kkk = 1;

        while (jjj <= 32) {

            if (nums[iii] & kkk) {

                if ((high & kkk) ^ (low & kkk) ^ kkk)
                    low |= kkk;
                else
                    low &= ~kkk;

                if ((high & kkk) ^ (low & kkk) ^ kkk)
                    high |= kkk;
                else
                    high &= ~kkk;
            }

            kkk <<= 1;
            jjj++;
        }
    }

    int ans = 0;
    int iii = 1;
    int jjj = 1;

    while (iii <= 32) {

        if (low & jjj || high & jjj)
            ans |= jjj;

        jjj <<= 1;
        iii++;
    }

    return ans;
}

int main()
{
    const struct TestCase {
        vector<int> nums;
        int ret;
    } test_cases[] = {
        {
            { 1, 1, 1, 3 },
            3
        },
        {
            { 1, 1, 1, 2, 3, 2, 2 },
            3
        },
        {
            { 1, 1, 1, 2, 3, 2, 2, 3, 4, 3 },
            4
        },
    };

    for (int iii = 0; iii < sizeof(test_cases) / sizeof(TestCase); iii++) {

        const TestCase &tc = test_cases[iii];

        int actual_ret = find(tc.nums);

        if (tc.ret != actual_ret) {
            cout << "Case #" << iii << ": FAILED" <<  endl;
            cout << "\tExpected ret=" << tc.ret << endl;
            cout << "\tAcutal   ret=" << actual_ret << endl;
        }

        actual_ret = find2(tc.nums);

        if (tc.ret != actual_ret) {
            cout << "Case #" << iii << ": FAILED" <<  endl;
            cout << "\tExpected ret=" << tc.ret << endl;
            cout << "\tAcutal   ret=" << actual_ret << endl;
        }

    }

    return 0;
}

3. 问github上的项目,推荐TypoChecker使用Trie树。

时间: 2024-08-28 01:41:54

2015-09-09 [一点资讯]--数据抓取和处理工程师--4面的相关文章

2015-09-09 [一点资讯]--数据抓取和处理工程师--5面

时间:2015-09-09 15:40 ~ 16:40 地点:北京市海淀区王庄路1号 清华同方科技广场D座 西区 7层 这面是HR面.聊创业公司和大公司的优缺点.工作时间和年假问题.一周工作6天,OMG.一年7天假,OMG. 但是,一点资讯竟然在硅谷有Office,巨想去. 总结:不错的创业公司,值得拥有!

2015-09-09 [一点资讯]--数据抓取和处理工程师--3面

时间:2015-09-09 13:40 ~ 14:40 地点:北京市海淀区王庄路1号 清华同方科技广场D座 西区 7层 1. A 和 B 有多少bit不一样 #include <climits> #include <cmath> #include <cstdlib> #include <cstring> #include <iostream> #include <iomanip> #include <string> usi

2015-09-09 [一点资讯]--数据抓取和处理工程师--2面

时间:2015-09-09 11:00 ~ 12:00 地点:北京市海淀区王庄路1号 清华同方科技广场D座 西区 7层 1. str to float 源码链接:https://github.com/loverszhaokai/Demo/blob/master/str_to_float/src/str_to_float.cc #include <climits> #include <cmath> #include <cstdlib> #include <cstri

2015-08-11 [今日头条]--数据抓取和处理工程师--2面

时间:2015-08-11 11:30 ~ 12:30 地点:知春路甲48号盈都大厦B座11层今日头条 1. 先对着简历的项目问了许多. 2. 算法题:一个按顺序排好的数组,从某一个位置开始将后面的数移动到前面.例如,"123456789" -> 从第7个元素开始移动到最前面,"789123456", 在这种情况下查找一个数. int search(int A[], int left, int right, int target) { if (left <

博客数据抓取总结

今天下午的总结让我发现了自己的几个缺点,立此为证,以求改变. 第一点,事前观察不够仔细.事先在源代码上发现了几个数据就急着着手去做,没有观察完所有的数据,导致做到一半才发现有些是js代码执行后才出现的数据,与一般静态源代码的数据的抓取方式不同. 第二点,坚持耐性尚缺.遇到了因为版本问题等而导不出数据到Excel,动态数据抓取不了,网站各种标记不同等问题,而暂时放弃去做另外的项目.其实这个时候我还有更好的解决方案,就是求助老师.这也就是我的第三点,要记得在关键时候适当得求助别人,不管是老师还是同学

大数据抓取采集框架(摘抄至http://blog.jobbole.com/46673/)

摘抄至http://blog.jobbole.com/46673/ 随着BIG DATA大数据概念逐渐升温,如何搭建一个能够采集海量数据的架构体系摆在大家眼前.如何能够做到所见即所得的无阻拦式采集.如何快速把不规则页面结构化并存储.如何满足越来越多的数据采集还要在有限时间内采集.这篇文章结合我们自身项目经验谈一下. 我们来看一下作为人是怎么获取网页数据的呢? 1.打开浏览器,输入网址url访问页面内容.2.复制页面内容的标题.作者.内容.3.存储到文本文件或者excel. 从技术角度来说整个过程

ngrep环回接口数据抓取方法,使用-d lo参数

ngrep环回接口数据抓取方法,使用-d lo参数,注意顺序: ngrep -W byline -d lo port 80

利用Selenium制作python数据抓取,以及对Selenium资源介绍

当当当~第三篇博客开始啦~ 这次的话题是数据抓取.终于到了核心部分的探讨,我的心情也是非常激动啊!如果大家baidu或者google(如果可以的话)数据抓取或者data crawling,将会找到数以千计的例子.但是大多数的代码非常的冗长,并且许多代码还是抓取静态数据之后,对动态JS写成的数据却毫无办法.或者,利用HTML解析网址后,再找到JS写的数据页面来寻找到所想要的数据. 但是!不知各位是否有发现过,如果打开chrome或者safari或者各种浏览器的审查元素.网页上能看到的数据,其实都会

delphi 用idhttp做web页面数据抓取 注意事项

这里不讨论webbrowse方式了 .直接采用indy的 idhttp  Get post 可以很方便的获取网页数据. 但如果要抓取大量数据 程序稳定运行不崩溃就不那么容易了.这几年也做了不少类似工具 总结了几点 好记性不如烂笔头. 内存泄露 获取页面文本 少不了用到html解析 具体到delphi 估计采用mshtml htmltotext 方法的不少,这个方案再大数据量时就会内存溢出 导致程序崩溃,而这并不是每个程序员都知道.解决的方案:采用自己的html解析类 这里我要感谢 武稀松(csd