2015-08-11 [豌豆荚]--研发--1面

时间:2015-08-11  15:00 ~ 16:00

地点:北京邮电大学鸿通楼

类别:电面

1. 问简历。

2. 算法题:

平台:collabedit

/*

1. 将 string 转化为 integer
*/

#include <string>
#include <climits>

using std::string;

string trim(const string &str)
{
    int first_index = 0;

    while (first_index < str.size()) {
        if (str[first_index] != ‘ ‘)
            break;
        first_index++;
    }

    int last_index = str.size() - 1;
    while (last_index >= 0) {
        if (str[last_index] != ‘ ‘)
            break;
        last_index--;
    }

    return str.substr(first_index, last_index - first_index + 1);
}

// "abc"              -> 1 -> not string
// "123456789012345"  -> 2 -> too long
int last_err_code;

// " 123456 "          -> 123456
// " -123456"          -> -123456
// ""                  -> 0         last_err_code = 1
// " abc"              -> 0         last_err_code = 1
// "+"                 -> 0         last_err_code = 1
// "-"                 -> 0         last_err_code = 1
// "123456789012345"   -> 0         last_err_code = 2
int string_to_int(const string &str)
{
    int index = 0;
    bool is_negative = false;
    long long ret = 0;

    const string num_str = trim(str);

    if (num_str.size() == 0) {
        last_err_code = 1;
        return 0;
    }

    if (num_str[0] == ‘-‘) {
        is_negative = false;
        index = 1;
    } else if (num_str[0] == ‘+‘) {
        is_negative = true;
        index = 1;
    }

    if (index == 1 && index == num_str.size()) {
        // "+"
        // "-"
        last_err_code = 1;
        return 0;
    }

    while (index < num_str.size()) {
        if (num_str[index] < ‘0‘ || num_str[index] > ‘9‘) {
            // "abc"
            // "123cbd"
            last_err_code = 1;
            return 0;
        }

        ret = ret * 10 + (int)(num_str[index] - ‘0‘);

        if (ret > (long long)INT_MAX) {
            last_err_code = 2;
            return 0;
        }

        index++;
    }

    return is_negative ? -1 * (int)ret : (int)ret;
}

3. 算法题:

平台:collabedit

/*
给两个递增的整数数组 A 和 B,长度分别为 n 和 m。找出这两个数组中第 K 小的数。
例如:A = [1,2, 4, 8, 10], B = [2, 3, 4, 5], K = 4。第 K 小的数是 3。
*/

int last_err_code;

// Return -1 when error and set last_err_code
int find_kth_small(int A[], int n, int B[], int m, int K)
{
    int ans = 0;
    int index_a = 0;
    int index_b = 0;
    int index = 1;

    if (n < 0 || m < 0 || K > n + m || K <= 0) {
        last_err_code = 1;
        return -1;
    }

    while (index < K) {
        if (index_a < n && index_b < m) {
            if (A[index_a] < B[index_b])
                index_a++;
            else
                index_b++;
        } else if (index_a < n) {
                index_a++;
        } else {
                index_b++;
        }
        index++; // ERROR 当时忘记对index进行自增了!
    }

    if (index_a < n && index_b < m)
        ans = A[index_a] < B[index_b] ? A[index_a] : B[index_b];
    else if (index_a < n)
        ans = A[index_a];
    else
        ans = B[index_b];

    return ans;
}

时间复杂度:O(K)

面试官让优化一下:

int last_err_code;

// Return -1 when error and set last_err_code
int find_kth_small(int A[], int n, int B[], int m, int K)
{
    int a_left = 0;
    int b_left = 0;
    int k_2;
    int a_k_2;
    int b_k_2;

    if (n < 0 || m < 0 || K > n + m || K <= 0) {
        last_err_code = 1;
        return -1;
    }

    while (K > 2) {
        k_2 = (K - 1) / 2;
        a_k_2 = a_left + k_2;
        a_k_2 = a_k_2 < n - 1 ? a_k_2 : n - 1;
        b_k_2 = b_left + k_2;
        b_k_2 = b_k_2 < m - 1 ? b_k_2 : m - 1;

        if (A[a_k_2] == B[b_k_2]) {
            return A[a_k_2];
        } else if (A[a_k_2] < B[b_k_2]) {
            K -= a_k_2 - a_left;
            a_left = a_k_2;
            if (a_left == n - 1)
                return B[b_left + K - 2];
        } else {
            K -= b_k_2 - b_left;
            b_left = b_k_2;
            if (b_left == m - 1)
                return A[a_left + K - 2];
        }
    }

    if (K == 1)
        return A[a_left] < B[b_left] ? A[a_left] : B[b_left];
    return A[a_left] > B[b_left] ? A[a_left] : B[b_left];
}
时间: 2024-10-17 20:45:37

2015-08-11 [豌豆荚]--研发--1面的相关文章

Murano Weekly Meeting 2015.08.11

Meeting time: 2015.August.11th 1:00~2:00 Chairperson:  Serg Melikyan, PTL from Mirantis Meeting summary: 1.Migrating to yaql 1.0 status.    PIC:       Stan Lagun    Status:   All commits are on review but not yet merged. New yaql engine should be ful

2015/08/11博客园页面(自身)

-------------------- 页面定制CSS代码 /*------CSS Code-----------------------------------*/.subtitle{ font-size:200%; margin-left:750px; margin-top:-30px; margin-bottom:-12px; font-weight:bold; font-family:楷体,"Times New Roman",Georgia,Serif;}#navigator

Bentley.Descartes.V8i.SS5.08.11.09.601 1DVD

Autodesk Softimage Entertainment Creation Suite 2015 x64 JetBrains PyCharm Pro 3.1.2 Pro Win/Mac/Linux Malwarebytes Anti-Malware Premium 2.0.1.1004 Multilanguage + Portable Killetsoft TRANSDAT 17.22 Multilanguage Evaer Video Recorder for Skype 1.5.3.

dockone上2015.08 Docker有价值文章

Docker入门与基础 [1] Docker入门实战, http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1 [2] 什么是Docker?刘梦馨, 28 Jun 2014, http://oilbeater.com/docker/2014/06/28/what-is-docker.html [3] 访谈 | Docker公司首席布道师谈容器和下一代虚拟化, http://dockone.io/article/590 [4] 两年之后,再思考D

《软件测试管理公开课》2015.8.7~8 深圳 2015.8.11~12 北京 2015.8.18~19上海,欢迎报名!

课时:13小时(2天) 在软件开发流程中构筑软件质量 --软件测试管理     2015.8.7~8 深圳 2015.8.11~12 北京 2015.8.18~19上海   [课程背景] 据中国软件行业协会研究报告显示,2010年1-11月,我国软件业呈快速增长态势,同比增长30%,增速比去年同期提高8.6个百分点,软件产业已成为中国高科技发展重要支柱之一,但中国软件产品质量保证手段以及测试流程和管理的规范性,与国外同行(美国.印度等)存在较大的的差距.      在软件业较发达的国家, 软件测

Bentley.CivilStorm.V8i.SS5.08.11.05.113+Bentley.HAMMER.V8i.SS6.08.11.06.113

ANSYS.Customization.Tools(ACT).V17.0Bentley.CivilStorm.V8i.SS5.08.11.05.113Bentley.HAMMER.V8i.SS6.08.11.06.113Bureau.Veritas.Steel.v3.0eCSI.Bridge.2016.Advanced.v18.1.0.1227CSI.SAP2000.v18.1.0.1227Dassault.Systemes.SIMULIA.SIMULIA.FE-SAFE.2016.HF1Das

Bentley.OpenPlant.Isometric.Manager.V8i.SS5.08.11.09.404 1CD

Bentley.OpenPlant.Isometric.Manager.V8i.SS5.08.11.09.404 1CD Autodesk.Smoke.v2015.SP1.MacOSX 1DVD Autodesk.Smoke.v2015.SP1.Optional.Utilities.MacOSX 1DVD Edgecam.2014.R1.SU3.Update.Only 1CD Oshonsoft.8085 Simulator IDE 3.21 1CD Oshonsoft.AVR Simulato

我关注的一周技术动态2015.08.17

服务化和资源管理技术 1. Kubernetes技术分析之存储 http://dockone.io/article/556 要点: 众所周知,使用Docker的时候,容器中的数据是临时,即当容器销毁时,其中的数据时丢失.如果需要持久化数据,需要使用Docker Volume挂载宿主机上的文件目录到容器中.本文介绍了 kubernetes 支持的几种存储系统. 2. Docker 1.8:可信镜像.Toolbox.Registry 以及编排工具大更新 http://dockone.io/artic

WINDOWS 10 企业版LTSB 2015年11月补丁更新情况

WINDOWS 10 企业版LTSB 2015年11月补丁与其他WINDOWS 10版本自动更新KB3105213,按微软对LTSB的规划,LTSB不会轻易增加新功能,所以不会收到其他版本推送的1511更新包,安装这个KB3105213不会改变LTSB内部版本号,LTSB目前内部版本号还是10240, 不会更新到10586版本. LTSB的内部版本按以前的官方说明,一年只会升级一次

微软批量授权版WINDOWS 10资料(截至到2015年11月,此处无下载地址)

微软批量授权版WINDOWS 10资料: 1.专业版: Windows 10 专业版(2015 年 7 月发布) WINDOWS 10专业版简体中文,32位/64位 SW_DVD5_Win_Pro_10_32BIT_ChnSimp_MLF_X20-25545.ISO SHA1:0F2F67F5120ED26D28C5C15575275843C0D6CB38 SW_DVD5_Win_Pro_10_64BIT_ChnSimp_MLF_X20-25549.ISO SHA1:A21F4E551ABAC2