艺考网
全国站

秋招已近尾声!精选大厂面试经典算法题,你会做吗?

chanong
2025-05-10 08:59:43
编辑说
非负整数是什么随着2019年校招结束,“金九银十”的跳槽季也已经接近尾声,不知道在裁员、消减HC、只招中高级岗位等等“悲观”情绪下,你是否已经如愿入职心意的企业?

秋天在这里,一次采访和一次很酷...

随着2019年校园招聘的结束,“黄金9月和 10月”的工作季节即将结束。我想知道您是否已经加入了您希望处于“悲观”情绪的公司,例如裁员,减少HC以及仅招募中间和高级职位?还是您仍将在冬季卷曲并积累力量?多年来,在技术访谈中,算法访谈已成为大公司必须克服的障碍。候选人不仅必须向面试官展示他们的基本算法技能,而且还必须展示其非凡的思维能力和代码写作能力,以便获得更富有的人。

下面,我们选择了一些经典的算法问题,这些问题今年在今年在采访候选人时由一级公司和独角兽公司招募。您可以花几分钟思考问题,列出几种不同的解决方案,然后分别考虑复杂性,最后提供最佳解决方案。也欢迎您在文章结尾留言,写下您的解决方案,并与所有人进行讨论。

顺时针螺旋矩阵

给定一个包含MXN元素的矩阵(M行,n列),以顺时针螺旋顺序返回矩阵中的所有元素。

示例1:

进入:

[1,2,3],

[4,5,6],

[7,8,9]

输出:[1,2,3,6,9,8,7,4,5]

示例2:

进入:

[1,2,3,4],

[5,6,7,8],

[9,10,11,12]

输出:[1,2,3,4,8,12,11,10,9,5,6,7]

尽管这个问题似乎不涉及复杂的数据结构或高级算法,但实际上在编写代码过程中包含多个循环,并且需要判断多个边界条件。在写作之前,您必须首先从思维级别清楚地考虑它,以形成一个清晰的想法,以避免“您可以阅读它,并且在编写问题时就可以消除它”。

这个问题的核心思想是,起点坐标,方向和位移可以定义矩阵中的唯一线段,并且可以知道当前路径下的所有坐标。并且螺旋过程可以抽象以访问连接到末端的多个线段,并且这些线段具有以下特征:

通过这些抽象的条件,我们可以根据初始起点坐标,方向和位移在矩阵中螺旋式所有坐标。

示例代码:

public List spiralOrder(int[][] matrix) {
List result = new ArrayList<>(); int height = matrix.length, width = height == 0 ? 0 : matrix[0].length; int size = height * width;
int[] dirX = {0, 1, 0, -1}; int[] dirY = {1, 0, -1, 0};
// 初始化起点坐标:(0,-1) 方向:向右; int x = 0, y = -1, dir = 0; for (int step, total = 0; total < size; total += step) {
// 根据方向得到对应的位移, 并修正此后矩阵的参数(此后线段的长度) if (dir == 0 || dir == 2) { step = width; height--; } else { step = height; width--; } // 此前确定了起点坐标、方向和位移, 就可以得到当前线段的所有坐标,并输出到结果集; for (int i = step; i > 0; i--) { x += dirX[dir]; y += dirY[dir]; result.add(matrix[x][y]); } // 调整下一条线段方向 dir = ++dir % 4; }
return result; }

复杂性分析:

基本计算器

实现基本计算器来计算简单的字符串表达式的值。字符串表达式仅包含非阴性整数,“+, - , *, /”操作员和空格。整数部门仅保留整数部分。

示例1:

输入:“ 3+2*2”

输出:7

示例2:

输入:“ 3/2”

输出:1

示例3:

输入:“ 3+5/2”

输出:5

在这个问题中,由于存在优先级,因此您可以首先考虑使用堆栈来保存数字。如果添加或减去数字之前的符号,请将当前数字推入堆栈;如果先前的符号是乘法或划分,则从堆栈顶部取出一个数字并执行乘法或除法操作,然后将结果推入堆栈。在这里应注意的是,通过添加当前数字的相反数来实现减法。一遍又一遍地完成遍历后,将计算所有乘法或除法,然后将堆栈中的所有数字添加为最终结果。

示例代码:

class Solution {public:    int calculate(string s) {        // 有个测试用例 int 型会超范围        long n = s.size(), num = 0, result = 0;        // 假设第一个运算符为+,即第一个数直接入栈        char op = '+';        stack<int> nums;
for(int i=0;i // 是数字 if(s[i]>='0'){ num = num*10+s[i]-'0'; } // 是运算符或最后一个数字 if((s[i]<'0'&&s[i]!=' ') || i==n-1){ if(op == '+') nums.push(num); if(op == '-') nums.push(-num); if(op == '*' || op == '/'){ int temp = (op == '*') ? nums.top()*num : nums.top()/num; nums.pop(); nums.push(temp); } op = s[i]; num = 0; } }
// 计算结果 while(!nums.empty()){ result += nums.top(); nums.pop(); } return result; }};

复杂性分析:

位计算

给定非负整数数字。对于范围0≤i≤NuM中的每个数字i,计算其二进制数中的1个数字,并将其返回为数组。

示例1:

输入:2

输出:[0,1,1]

示例2:

输入:5

输出:[0,1,1,2,1,2]

解决此问题的解决方案是,对于所有数字,它们仅分为奇数甚至数字。关键是要在二进制数中找到奇数和偶数之间的区别。对于二进制数字,奇数必须比之前的偶数数量最低。偶数数中的1中的数量必须多于数量除以2的数量,因为最低位是全部0。

例如:

其余的二进制数量1只有0为0,因此您可以根据奇偶校验开始遍历遍历计算。在实施特定的实现时,您可以循环一次找到两个值,因此您必须首先根据NUM的奇偶校验确定循环的范围,以避免最后一个循环中仅剩下一个数字。另外,我们必须确定基于奇偶校验完成周期后,是否仍然有许多数字非负整数是什么,没有1位数字。

示例代码:

class Solution {public:    vector<int> countBits(int num) {        vector<int> res(num + 1);        res[0] = 0;        int n = num % 2 ? num - 1 : num;        for(int i = 1;i <= n;i++) {            res[i] = res[i-1] + 1;            i++;            res[i] = res[i / 2];        }        if(num % 2)            res[num] = res[n] + 1;         return res;    }};

复杂性分析:

如果您没有深入思考这些问题的解决方案,那么当您第一次看到问题的解决方案时,您可能会“从天上掉下来”,这对您来说很难考虑。实际上,对于算法采访,更有必要提高算法的内部力量并不断训练。您可以在访谈中尝试使用“四步提问的方法”,即

这种“四步意向的方法”和算法学习和实践中使用的“五通问题提出方法”是由Geek 算法培训老师Qin Chao提出的。希望它可以帮助学生克服对算法的恐惧,并通过良好的学习方法和故意实践,他们可以快速提高对数据结构和算法的理解,并提高他们在问题中的效率。

7天入门级数据结构和算法

数据结构和算法是主要的互联网制造商的垫脚石,也是开发人员努力争取卓越并继续改善的内部力量基础。但是,当您真正学习算法时,这是一个不同的情况,因为真正的基本和核心事物必须是一个棘手的问题,并且学习困难将相对较高。

“不要在漂浮的沙子中建立高平台。”学习算法也是如此。要“咀嚼”这个“硬骨”,您必须从基础知识开始。如果您正确入门,则不必担心将来会更深入地学习。

Based on this, Geek and Mr. Qin Chao the " Camp Small Class", which took 7 days to the and of 7 data , how Java code , lists, and , and the ideas and codes of high- and , and in the use of the "four-step - " and "five-time问题编写方法”。详细的课程内容包括:

为了帮助您顺利完成7天的学习,我们还拥有全方位的学习服务:

老师Qin Chao将从大规模的问题库中选择最值得练习,最频繁的算法问题。

前线互联网公司的助教每天都在小组中回答您的问题

配备独家班教师在整个过程中领导班级,创建一个有效的学习社区并获得学习伙伴

过去分享杰出的老学生,向您传达一种有效的学习方法和最重要的知识点摘要

有限的时间益处

¥299的价值,有限的时间折扣仅为9.9日元,只有200人。注册后,您将获得:课程视频的无限期播放,讲师选择的高频问题,在线问答助教指南以及有效的学习社区。

(扫描QR码以了解课程详细信息并立即获取特殊位置)

注册后如何开始学习

(扫描QR码以咨询以获取详细信息)

永远不要将算法视为“炼狱”。跟随合适的老师,找到合适的教程,学习该方法,然后逐步克服它。怎么能有一个无法克服的障碍?

免责声明
本站所有收录的学校、专业及发布的图片、内容,均收集整理自互联网,仅用于信息展示,不作为择校或选择专业的建议,若有侵权请联系删除!

大家都在看

2022年中考录取分数线预测及成都地区录取分数线详情

2022年中考录取分数线预测及成都地区录取分数线详情

2022年中考录取分数线有可能是多少380分。中考每年叠加起来的平均分是380分,因此2022年的录取分数线有可能是380分。中考的全称是初中毕业考试
2025-05-10
牛汉简介:现当代著名诗人,出身穷苦农民家庭的成长历程

牛汉简介:现当代著名诗人,出身穷苦农民家庭的成长历程

牛汉专区牛汉简介牛汉,现当代著名诗人,原名史成汉,曾用笔名谷风。远祖系蒙古族。1923年10月生于山西定襄县一个穷苦的农民家庭。14岁之前一直在乡村
2025-05-10
三峡题解与注释翻译:领略郦道元笔下三峡的奇美风光

三峡题解与注释翻译:领略郦道元笔下三峡的奇美风光

【题 解】 《三峡》是一篇写景散文。郦道元以饱满的热情、深厚的文笔及形象生动而富有概括力的语言描绘了长江三峡的奇美风光,歌颂了祖国的大好河山,抒发了对山川的挚爱之情。
2025-05-10
秋招已近尾声!精选大厂面试经典算法题,你会做吗?

秋招已近尾声!精选大厂面试经典算法题,你会做吗?

非负整数是什么随着2019年校招结束,“金九银十”的跳槽季也已经接近尾声,不知道在裁员、消减HC、只招中高级岗位等等“悲观”情绪下,你是否已经如愿入职心意的企业?
2025-05-10
半圆周长计算公式相关问题,含隧道、窗户、防空洞截面等题型

半圆周长计算公式相关问题,含隧道、窗户、防空洞截面等题型

半圆的面积公式A、πD/2B、πD/4C、πD2/请帮忙给出正确答案和分析,谢谢!
2025-05-10
诗人杨万里六月西湖送别林子方,借景抒情尽显别样情谊与美景

诗人杨万里六月西湖送别林子方,借景抒情尽显别样情谊与美景

下面是范文网小编分享的《晓出净慈寺送林子方》鉴赏9篇(晓出净慈寺送林子方这首诗的讲解),供大家赏析。《晓出净慈寺送林子方》鉴赏1  晓出净慈寺送林子方  作者:杨万
2025-05-10
非负整数是什么 因不满老东家成微软附庸,11名前员工出走创Anthropic推Claude叫板ChatGPT

非负整数是什么 因不满老东家成微软附庸,11名前员工出走创Anthropic推Claude叫板ChatGPT

GPT-3核心成员出走打造ChatGPT最强竞品!12项任务8项更强,最新估值50亿美元。
2025-05-10
晓出净慈寺送林子方:领略宋代杨万里笔下夏季西湖美景及特点

晓出净慈寺送林子方:领略宋代杨万里笔下夏季西湖美景及特点

《晓出净慈寺送林子方》是写什么季节的《晓出净慈寺送林子方》描写的是夏季。《晓出净慈寺送林子方》是宋代诗人杨万里的组诗作品。这两首诗通过描写六月西湖的美丽景色
2025-05-10
7月1日下午市2022年中考成绩发布及录取分数线公布

7月1日下午市2022年中考成绩发布及录取分数线公布

7月1日下午,市2022年中考成绩发布与录取工作新闻发布会举行。会上公布了我市各普通高中、综合高中班录取分数线(详见表格)。据了解
2025-05-10
2011年重庆中考录取分数线及相关报考人数与查分时间详情

2011年重庆中考录取分数线及相关报考人数与查分时间详情

2011年重庆外国语学校中考录取分数线为669分,超出最低送档线95分。
2025-05-10