怎样应对IT面试与笔试-(一)

1. 数据结构与算法

  • 面试中对数据结构和算法的考察就是手写代码解决具体题目
  • 这种解题的能力或者编程的能力是可以通过有意识的训练来提高的,即使你是一个菜到不行的菜鸟
  • 科学训练包括了有目的的重复性训练、周期性总结
  • 下面章节中的示例代码只是为了说明解题思路,更容易理解,所以他们不一定是最优的

1.1 第一阶段-重温基本数据结构

Tip: 我们大部分练习题目来自leetcode,请小伙伴们先行注册一下。
Tip: leetcode虽然现在已经上线了中文网站,但还是建议大家使用原版,顺便练习下英文理解能力

Note: 第一阶段计划我们通过尝试解决一些简单题目,帮大家熟悉常见的数据结构及其表达方式

  • 我们会使用固定的流程(理解题目-画图-核心代码-完善边界条件-优化)去解决这些问题,目的是想帮助小伙伴们一开始就建立一个比较良好的思维习惯,解决一道题目的重点在于理清解题思路,对应的代码实现是一个熟能生巧的过程。有些小伙伴一见到题目,就急急忙忙去直接思考代码怎么实现。在初级阶段,我们不建议这么做。
    Note: 小伙伴们的主要任务是把下面题目代码敲一遍提交到leetcode
    Note: 这一阶段你可以过的比较放松,琢磨明白下面题目的示意图和代码的对应关系就可以了。

1.1.1 数组

217. Contains Duplicate

判断一个整数数组是否包含重复元素,包含返回true,否则返回false

1.举例子-画图-解题思路
217.png

总体思路是:将集合中元素两两比较

  • 从第一个元素(5)开始依次与后面元素进行比较,5-6、5-7、5-6,没有重复元素
  • 从第二个元素(6)开始依次与后面元素进行比较,6-7、6-6,发现相等元素(6),返回true
2. 写核心逻辑代码

通常涉及无序数组nums的两两元素比较,可以直接应用下面的双重循环框架:

for (int i = 0; i < nums.size(); ++i) 
{
    for (int j = i+1; j < nums.size(); ++j) 
    {
        //判断逻辑
    }
}

利用上个模板我们直接写出本题核心代码

for (int i = 0; i < nums.size(); ++i) 
{
    for (int j = i+1; j < nums.size(); ++j) 
    {
        // 遇到相等的元素直接返回true
        if (nums[j] == nums[i]) return true;  
    }
}
3. 完善边界条件并提交代码

除了核心逻辑外,边界条件的考虑是必不可少的一个环节,例如nums没有元素或者只有一个元素时候我们的代码应该返回什么结果。加上边界条件后的代码如下:

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        int n = nums.size();
        if(n <= 1) return false;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < i; ++j) {
                if (nums[j] == nums[i]) return true;  
            }
        }
        return false;
    }
};

上述代码按Submit Solution按钮后,会提示: Submission Result: [Time Limit Exceeded],意思是在验证一些特殊case时候算法超时了,需要我们优化算法

4. 更优方案

Tip: 上面的情况有些类似我们面试时候的套路:

面试套路.png

所以我们会想:如果在一个有序数组中查找重复数字是否能提高效率?


217-op.png

可以看到,不同于上面的双重循环,排序后只需要一次遍历中比较相邻元素是否相等就可以了。

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        //边界条件
        if(nums.size() <= 1)
            return false;
        //先对无序数组排序
        sort(nums.begin(),nums.end());
        //一次遍历,每个元素都与它前面的元素进行对比
        for(int i = 1; i < nums.size(); ++i)
        {
            if(nums[i] == nums[i -1])
                return true;
        }
        return false;
    }
};

提交上面的代码,可以得到 Submission Result: [Accepted]的提示,意味着你已经在leetcode上提交了第一段验证通过的代码,恭喜下自己吧

剧透: 后面我们还会看到使用hash table来解决上面这个问题

5. 总节
  • 我们知道了数组这一数据结构的表达方式(vector)
  • 我们学到了第一个常用技巧:先排序再处理
  • 我们使用了一个最简单的算法:双重循环

怎样应对IT面试与笔试-(一)
怎样应对IT面试与笔试-(二)
怎样应对IT面试与笔试-(三)
怎样应对IT面试与笔试-(四)
怎样应对IT面试与笔试-(五)
怎样应对IT面试与笔试-(五-1)
怎样应对IT面试与笔试-(六)
怎样应对IT面试与笔试-(七)
怎样应对IT面试与笔试-(八)
怎样应对IT面试与笔试-(九)
怎样应对IT面试与笔试-(十)
怎样应对IT面试与笔试-(十一)
怎样应对IT面试与笔试-(十二)
怎样应对IT面试与笔试-(十三)
怎样应对IT面试与笔试-(十四)
怎样应对IT面试与笔试-(十五)
怎样应对IT面试与笔试-(十六)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 数组 记录《剑指offer》中所有关于数组的题目,以及LeetCode中的相似题目 相关题目列表 说明 由于简书...
    wenmingxing阅读 1,517评论 1 12
  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 2,922评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 我有一家咖啡馆 他叫初之咖啡馆 人之初的初 在这里没有任何烦恼 人们在这里能够找到最初的自己 这就是咖啡馆的名字由...
    语墨清书阅读 286评论 0 0
  • 三月,春意萌动! 今天是三月的首日,其实每天或多或少总有大大小小的感触,我知道那是我的自我觉察,就如原先...
    彩雪丽阅读 182评论 0 0