关于大厂的手撕代码以及经常面试的题目

金三银四,当前是各互联网大厂,公司的人才流动最大的时期,候选人忙着面试,招聘人员忙着招人,安排面试。近期本人进行了各大厂的面试,同时也与周边去大厂面试的同事进行了交流,

所以在此总结了一些经验、心得,拿出来和大家分享一下。

大厂对在线程编程、数据结构算法的重视程度比较高,特别是在线编程看的越来越重视。

在线编程常刷的网站主要有两个

1、力扣网 https://leetcode-cn.com/ 题量比较大,题解写的比较好,题目的输入输出不需要自己处理,只需要实现算法逻辑,返回正确结果即可。

2、牛客网 https://www.nowcoder.com/ 题目比较多,跟大厂合作比较多,多个大厂使用牛客网的题库进行在线编程考试,但输入输出比较麻烦,需要自己构建输入输出。

包含头文件、输入输出如下:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    double num = 0;
    cin >> num;
    cout << round(num);
    return 0;
}

 

在线编程的考点主要有两点,

1、计算机常识考察;考察常见的基础数据结构的认知,如:数组、栈、队列、树、图  等。在编程过程中很容易用到,C语言的比较吃亏,需要自己实现,像C++、JAVA,python等面向对象的语言,有现成的库函数和结构,直接拿来即用即可,C则需要自己实现一下。

       除了基础的数据结构可能还有别的考察点,如:素数、二叉树、子序列等 基础概念,有可能出的题目,不会解释基本的概念。

2、常规的编程算法、技巧考察。常规的编程算法、技巧总结如下:

1)逻辑推理的暴力解法(常见)

     这类的题目,一般偏向写逻辑,只要认真阅读题目,准确的判断逻辑,一般都能解出相应的题目。

2)比较排序(常见)

     此类题目一般会给出一个队列,会按照多个维护进行排序给出结果,参考练习题目:

     406. 根据身高重建队列   https://leetcode-cn.com/problems/queue-reconstruction-by-height/

     767. 重构字符串  https://leetcode-cn.com/problems/reorganize-string/ 

     621. 任务调度器  https://leetcode-cn.com/problems/task-scheduler/

     1636. 按照频率将数组升序排序 https://leetcode-cn.com/problems/sort-array-by-increasing-frequency/

3)双指针和滑动窗口解法

       解决判断某个区间满足对应的条件场景,参考练习题目: 3. 无重复字符的最长子串  https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

      1004. 最大连续1的个数 III    https://leetcode-cn.com/problems/max-consecutive-ones-iii/

    4)单调栈解法 

     一般是维护一个单调增或单调减的栈,根据题目情况,参考练习题目:901. 股票价格跨度  https://leetcode-cn.com/problems/online-stock-span/

5)栈的使用

      使用栈的 先进后出特点,满足相应的条件场景,参考练习题目:227. 基本计算器 II https://leetcode-cn.com/problems/basic-calculator-ii/

6)DFS和BFS(难度较大、出现的机率偏少)

      深度优先和广度优先一般适用与递归操作的场景,参考练习题目:

       997. 找到小镇的法官 https://leetcode-cn.com/problems/find-the-town-judge/

       207. 课程表  https://leetcode-cn.com/problems/course-schedule/

        200. 岛屿数量 https://leetcode-cn.com/problems/number-of-islands/

 7)动态规划(机率偏少 )

      一般是第N步的输入为第N-1步的输出,可以通过数学函数表示的,如:F(n) = F(n-1) + F(n-2) 此类问题。

        参考练习题目:746. 使用最小花费爬楼 https://leetcode-cn.com/problems/min-cost-climbing-stairs/

除上述总结的常用解法外,要学会使用常见的数据结构,了解其基本特性,并在编程时能够灵活应用,拓扑排序、并查集、分治法等高阶算法如果能够掌握更好。

在进行上机编程题时,如何才能够拿到高分呢?这里有些小技巧

1、首先战略上要正确,先全局过一遍,先做简单题,然后再做难度大的题。一般上机编程题至少两、三道题,不会是一道题,所以先全局看遍,针对完全没有思路的要先放一下,针对见过的题型,或是一看就有思路的,可以先进行下手。

2、其次是方法上,采用先写测试用例,然后再开始写代码。有些题目开始是有思路的,可是在写代码的过程中,会发现开始的思路是错的,这个时候需要重新调整思路,再进行编程,但先写测试用例,可以快速的验证新的思路是否考虑全面,是否有遗漏点。

3、注意备份,或是IDE 的撤销恢复功能,节约时间,提升效率。人在紧张的情况,很可能没有想通,着急调整编程思路,但发现原来的思路更容易继续下去,这个时候,需要快速恢复可以节约重新敲代码的时间。

4、学会舍弃,有些题目,可能某些比较偏的场景不太好实现,这个时候,不要花费大量的精力去实现这种比较偏的场景了,而是只需要实现部分场景即可,把一些你当前能快速实现的场景先适配完了,等其它题目都写的差不多了,再来深度思考比较难实现的场景。


在此总结一点内容,希望能够帮助后面参加面试,以及在线编程的同学们,希望你们能够做出一些好成绩

  

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值