首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

盘点互联网公司最常见的面试编程题

这样的话,我们完全可以经过充分的准备,很稳通过这一关,为下一环节争取更好的面试印象。...因此,根据题目标签,有方法体系慢慢训练吧,不光对面试有帮助,还能培养我们的算法思维,考虑问题更加缜密,写出来的代码更高效。 3 练习方法 ?...常用的数据结构: 1) 数组,应用广泛,可以灵活结合各种算法思想使用; 2) 堆,最常用的大小堆,堆排序等; 3) 队列,先进先出的数组,二叉树的遍历可以使用队列实现 4) 栈,先进后出的数组,二叉树的遍历用栈也可实现...11) 递归递归让代码变得更精炼,二叉树的遍历就是最有代表性的例子,递归代码只有5行以内; 12) 贪心:贪心有时可以得到最优解,有时只能得到可行解。 ?...反转字符串 作为补充,还有一类题目常考,并且如果平时不训练,考场上不太容易快速想出来,就是一类深度优先搜索和回溯相结合的题目,leetcode题库中这类相似的有好几道: 如何求 1~n 这连续 n

2.6K20

盘点互联网公司最常见的面试编程题

这样的话,我们完全可以经过充分的准备,很稳通过这一关,为下一环节争取更好的面试印象。...因此,根据题目标签,有方法体系慢慢训练吧,不光对面试有帮助,还能培养我们的算法思维,考虑问题更加缜密,写出来的代码更高效。 3 练习方法 ?...常用的数据结构: 1) 数组,应用广泛,可以灵活结合各种算法思想使用; 2) 堆,最常用的大小堆,堆排序等; 3) 队列,先进先出的数组,二叉树的遍历可以使用队列实现 4) 栈,先进后出的数组,二叉树的遍历用栈也可实现...11) 递归递归让代码变得更精炼,二叉树的遍历就是最有代表性的例子,递归代码只有5行以内; 12) 贪心:贪心有时可以得到最优解,有时只能得到可行解。 ?...反转字符串 作为补充,还有一类题目常考,并且如果平时不训练,考场上不太容易快速想出来,就是一类深度优先搜索和回溯相结合的题目,leetcode题库中这类相似的有好几道: 如何求 1~n 这连续 n

98120
您找到你想要的搜索结果了吗?
是的
没有找到

盘点互联网公司最常见的面试编程题

这样的话,我们完全可以经过充分的准备,很稳通过这一关,为下一环节争取更好的面试印象。...因此,根据题目标签,有方法体系慢慢训练吧,不光对面试有帮助,还能培养我们的算法思维,考虑问题更加缜密,写出来的代码更高效。 3 练习方法 ?...常用的数据结构: 1) 数组,应用广泛,可以灵活结合各种算法思想使用; 2) 堆,最常用的大小堆,堆排序等; 3) 队列,先进先出的数组,二叉树的遍历可以使用队列实现 4) 栈,先进后出的数组,二叉树的遍历用栈也可实现...11) 递归递归让代码变得更精炼,二叉树的遍历就是最有代表性的例子,递归代码只有5行以内; 12) 贪心:贪心有时可以得到最优解,有时只能得到可行解。 ?...反转字符串 作为补充,还有一类题目常考,并且如果平时不训练,考场上不太容易快速想出来,就是一类深度优先搜索和回溯相结合的题目,leetcode题库中这类相似的有好几道: 如何求 1~n 这连续 n

85720

AI 路上,第一步这么走下去...

算法是描述解决一个问题的步骤,外界给它所指定的数据,然后经过一系列步骤输出一个结果。为了更快更轻量级解决问题,我们会选择高效精简的结构去实现,这种结构称为数据结构。...并且,知道什么场景下该使用什么样的数据结构,高效实现一个算法。...比如,需要频繁插入的场景下,要选择链表,而不是呆萌选择数组,并知道为什么要这样做;面试官问你,二分查找的基本实现思路,你很快就能联想到两个指针;提到树,在你的脑海里就出现了递归二字;想到图,广度和深度优先遍历也出来了...相信理解决策树已不是问题,有了 Leetcode 中的贪心实战。...然后你连夜寻觅问题出在哪,最终锁定在一个API,你很欣喜,但是后来很绝望,因为它来自第三方包的调用。你完全不知道它的内部实现细节,抓狂了!

46260

递归思维:k 个一组反转链表

预计阅读时间:5 分钟 上篇文章 递归反转链表:如何拆解复杂问题 讲了如何递归反转一部分链表,有读者就问如何迭代反转链表,这篇文章解决的问题也需要反转链表的函数,我们不妨就用迭代方式来解决。...本文要解决「K 个一组反转链表」,不难理解: 这个问题经常在面经中看到,而且 LeetCode 难度是 Hard,它真的有那么难?...一、分析问题 首先,前文 学习数据结构的框架思维 提到过,链表是一种兼具递归和迭代性质的数据结构,认真思考一下可以发现这个问题具有递归性质。 什么叫递归性质?...我们可以直接递归调用 reverseKGroup(head, 2),因为子问题和原问题的结构完全相同,这就是所谓的递归性质。...,整个函数递归完成之后就是这个结果,完全符合题意: 三、最后说两句 从阅读量看,基本数据结构相关的算法文章看的人都不多,我想说这是要吃亏的。

31920

经典贪心算法:跳跃游戏

那么这篇文章,就讲 LeetCode 两道经典的贪心算法:跳跃游戏 I 和跳跃游戏 II。...Jump Game II 这是 LeetCode 第 45 题,也是让你在数组跳,不过难度是 Hard,解法比上一题困难一些: title2 现在的问题是,保证你一定可以跳到最后一格,请问你最少要跳多少次...该算法的时间复杂度是 递归深度 × 每次递归需要的时间复杂度,即 O(N^2), LeetCode 是无法通过所有用例的,会超时。 贪心算法比动态规划多了一个性质:贪心选择性质。...我知道大家都不喜欢看严谨但枯燥的数学形式定义,那么我们就来直观看一看什么样的问题满足贪心选择性质。 刚才的动态规划思路,不是要穷举所有子问题,然后取其中最小的作为结果?...但是,真的需要「递归」计算出每一个子问题的结果,然后求最值?直观想一想,似乎不需要递归,只需要判断哪一个选择最具有「潜力」即可: 比如上图这种情况应该跳多少呢?

1.2K10

分治、动态规划、回溯、贪心一锅炖

数据结构与算法系列专栏第四弹来袭,往期专栏链接如下: 前端如何搞定数据结构与算法(先导篇) 「时间管理」JavaScript算法时间、空间复杂度分析 你真的懂递归?...一篇算法系列专栏中我们搞明白了递归。其实递归这种编程技巧是很多算法的基础。 还看过的同学建议先移步这篇专栏你真的懂递归? 比如本文讲到的这几种算法思想,大部分都是基于递归思想基础的。...分治算法 Divide and Conquer 分治算法思想很大程度上是基于递归的,也比较适合用递归实现。顾名思义,分而治之。一般分为以下三个过程: 分解:将原问题分解成一系列子问题。...回到算法中,贪心算法是动态规划算法的一个子集,可以更高效解决一部分更特殊的问题。实际,用贪心算法解决问题的思路,并不总能给出最优解。因为它在每一步的决策中,选择目前最优策略,不考虑全局是不是最优。...如果还有数字需要被输入: 遍历下一个数字所对应的所有映射的字母 将当前的字母添加到组合最后,也就是 str + tmp[r] 关键点 for循环中调用递归

71310

LeetCode51,52,从八皇后到N皇后,让你从此笑傲递归

N皇后问题 N皇后问题是非常经典的算法问题,也是面试当中的常客。早年许多面试官喜欢考察N皇后问题,本质是想要通过这个问题考察候选人对于递归和搜索的掌握程度。...递归和搜索可以说是算法的基础,也是一个高阶工程师必须掌握的内容。因此它非常的重要,现在虽然面试当中出现得少了,但是它背后的算法的精髓却一直没有变。...还是因为这个问题很困难?还是它的思路很巧妙?由于这个问题是我自己提出的,书本并没有相关的答案,需要我们自己思考。我们先不公布答案,带着这个问题来分析一下这道题的思路。...也就是说我们递归的时候,只用一个数组就记录了整个棋盘的情况,这个时候用代码实现起来就要容易很多。...对于我们而言,把问题AC了其实并不重要,重要的是能够掌握这个思路构建的能力,这样以后我们就可以很方便迁移到其他的问题场景当中,这才是学习的精髓。

84530

如何k个一组反转链表

摘自labuladong算法小抄,使用go语言重新描述 之前的文章「递归反转链表的一部分」讲了如何递归反转一部分链表,有读者就问如何迭代反转链表,这篇文章解决的问题也需要反转链表的函数,我们不妨就用迭代方式来解决...这个问题经常在面经中看到,而且 LeetCode 难度是 Hard,它真的有那么难? 对于基本数据结构的算法问题其实都不难,只要结合特点一点点拆解分析,一般都没啥难点。...下面我们就来拆解一下这个问题。 一、分析问题 首先,前文学习数据结构的框架思维提到过,链表是一种兼具递归和迭代性质的数据结构,认真思考一下可以发现这个问题具有递归性质。 什么叫递归性质?...我们可以直接递归调用 reverseKGroup(cur, 2),因为子问题和原问题的结构完全相同,这就是所谓的递归性质。...发现了递归性质,就可以得到大致的算法流程: 1、先反转以 head 开头的 k 个元素。 ? 2、将第 k + 1 个元素作为 head 递归调用 reverseKGroup 函数。 ?

74130

一气之下,我一行代码搞定了约瑟夫环问题,面试官懵了

大家好,我是帅。 对于约瑟夫环问题估计大家都听说过,除非你刚刚读大一,因为大一大部分学校的课本都会降到这个算法题。...感兴趣的可以动手写一下代码,用这种数组的方式做,千万不要觉得很简单,编码这个过程还是挺考验人的。 这种做法的时间复杂度是 O(n * m), 空间复杂度是 O(n); 面试官:还有其他方法?...方法三:递归被迫只能拿出我的递归大法,递归是思路是每次我们删除了某一个士兵之后,我们就对这些士兵重新编号,然后我们的难点就是找出删除前和删除后士兵编号的映射关系。...如果你对递归不大懂,可以看我之前的递归文章:连刷半年题,告别递归,谈谈我的一些经验 我们定义递归函数 f(n,m) 的返回结果是存活士兵的编号,显然当 n = 1 时,f(n, m) = 1。...Leetcode 某道题解,或者有大神讨论题解,咱打开这份笔记,不管三七二十一,直接把最优解扔给他,然后退出群聊 链接:BAT 大佬分类总结的 Leetcode 刷题模版,助你搞定 90% 的面试

27530

拿下 BAT+华为校招的 200 题 LeetCode 高频题库

程序锅最近也刚刚在某大厂实习结束,然后秋招也差不多结束了,现在准备继续公众号和自己的个人博客(https://blog.dawnguo.cn)发发自己整理的内容和写写博客。...刷题代码仓库,这个程序锅一直有 commit,欢迎 star:https://github.com/dawnguodev/algorithm 假如你没时间刷这么多题的话,建议可以按照这份整理先做链表、...动态规划 DP 问题汇总(https://leetcode-cn.com/circle/article/NfHhXD/) 股票买卖问题 0-1背包九讲 题目 718-最长重复子数组(最值不一定是末尾)...) 543-二叉树的直径(递归 + 求树的高度) offer55/110-平衡二叉树(两种递归:自底而,自顶而下) offer28/101-对称的二叉树(一种递归、一种迭代)/对称二叉树 617-合并二叉树...(递归) 98-验证二叉搜索树(中序遍历的结果、递归的方式) 堆 题目 313-超级丑数(堆;动态规划) 378-有序矩阵中第 K 小的元素(堆,但是这个堆的用法其实就是排序,可以和合并k个排序链表总结到一块

2.4K30

LeetCode通关:连刷三十九道二叉树,刷疯了!

完全⼆叉树:至多只有最下面的两层结点的度数可以小于 2, 并且最下一层的结点都集中该层最左边的若干位置, 则此二叉树称为完全二叉树。...终⽌条件: 递归需要注意终止条件,终⽌条件或者终⽌条件写的不对,操作系统的内存栈就会溢出。 单层递归的逻辑 确定单层递归的逻辑,单层里会重复调用自己来实现递归的过程。...如果使用Java实现可以链表做文章,将尾插改成头插也是一样的效果。...你可以设计一个更快的算法? 思路: 递归方法: 如果要用递归是不是挺简单。左右子树递归,加上根节点。 /** * 222....因为根据定义最近公共祖先节点可以为节点本身。 思路: 我们想啊,查找公共祖先,要是我们能从两个节点往回走就好了。 那有什么办法呢? 还记得我们前面做路径问题的时候?我们用到了一个方法——回溯。

72320

算法养成记:合并两个有序链表

实际测试里 执行用时分别是:0ms,0ms 内存消耗分别是:38.5MB,38.8MB 如果是小量计算,递归问题不大,但是如果是大量数据的计算,不太建议用递归: 1.递归由于是函数调用自身,而函数调用是有时间和空间的消耗的...2.递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算。...这一版文案您还觉得满意? 哪里不太对,但又说不上来。 ? 数据结构和算法一直都是程序员面试重点。写好每一个方法,每一个接口,程序的效率也会越来越高。...为了学习和巩固数据结构和算法,我们特别创作了《呆萌程序员--明明凯凯算法养成记》,每天更新一篇数据结构知识点或者刷一道LeetCode题目。算法都会在LeetCode测试。...当然答案不唯一,由于能力有限,实现方法不一定是最好的,也希望各位小伙伴一起来学习分享~

32520

栈:如何实现有效括号的判断?

作者 | 无量测试之道 编辑 | 小 晴 有效括号,刷过LeetCode的也许对这道题很熟悉。 1.开篇问题:有效的括号[1] 假如现在要你来解这道题,你会想到怎样的解法了?...3.如何实现栈 从刚才栈的定义里,我们可以看出,栈主要包含两个操作,入栈和出栈,也就是栈顶插入一个数据和从栈顶删除一个数据。理解了栈的定义之后,我们来看一看如何用代码实现一个栈。...为了让你清晰看到这个过程对应的函数栈里出栈、入栈的操作,我画了一张图。图中显示的是,执行到 add() 函数时,函数调用栈的情况。 递归 算法中,经常会使用的一个思想就是递归思想。...那它与数据结构中的堆栈有什么区别了,它们是同一个概念? 内存中的堆栈和数据结构堆栈不是一个概念,可以说内存中的堆栈是真实存在的物理区,数据结构中的堆栈是抽象的数据存储结构。...我们也理解了栈实际开发中的些应用,以及使用递归,当n值很大地时候,会有大量的临时变量被压如栈中而消耗内存。以及最后通过栈的核心思想来解LeetCode中比较经典的算法题。

40520

动态规划路径问题 动态规划的前置思考记忆化搜索以及如何推导基本性质来简化case

你也先可以尝试做做,也欢迎你向我留言补充,你觉得与路径相关的 DP 类型题目 ~ 题目描述 这是 LeetCode 的「1575. 统计所有可行路径」,难度为 Hard。...一个直观的感觉是当油量消耗完,所在位置又不在 ,那么就算走到头了,算是一次「无效情况」,可以终止递归。 逻辑这没有错,但是存在油量始终无法为零的情况。...考虑一个问题:如果我们从某个位置 出发,不能一步到达目标位置的话,有可能使用多步到达目标位置? 也就是一步不行的话,多步可以? 答案是不可以。...如果我们某个位置 出发,不能一步到达目的 ,将永远无法到达目的。...仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

58721

【每日算法Day 73】学妹大半夜私聊我有空,然后竟然做出这种事!

题目链接 LeetCode 99. 恢复二叉搜索树[1] 题目描述 二叉搜索树中的两个节点被错误交换。 请在不改变其结构的情况下,恢复这棵树。...但是中序遍历无论使用递归实现还是栈实现,空间复杂度都是树的高度,不是常数。 想一下为什么我们需要用递归或者栈来实现中序遍历?...我们需要解决的就是这个问题,这里我们引入 Morris 遍历算法。 下图是一个二叉搜索树例子: ?...注意到非叶子结点 246 会被访问两次,第一次是作为根结点进入左子树,第二次是递归返回了,中序遍历到自己了。 那么不用递归或者栈,我们怎么第二次成功返回根结点呢?...所以第一次访问根结点时,首先要找出它左子树中最右边的那个叶子结点,把它的右儿子指向根结点。然后才能放心地递归遍历左子树,不用担心回不去啦。

31640

LeetCode171-Excel表列序号(进制转换问题)

LeetCode171-Excel表列序号 1、问题描述 2、解题思路:进制转换 3、代码实现 1、问题描述   给你一个字符串columnTitle,表示Excel表格中得列名称。...3: 输入: columnTitle = "ZY" 输出: 701 提示: 1 <= columnTitle.length <= 7 columnTitle 仅由大写英文组成 columnTitle 范围...["A", "FXSHRXW"] 内 2、解题思路:进制转换   这个我们可以仿照十进制中的进制转换方法,通常我们在从高位向低位处理的时候,起始设置nums=0,然后每次使用当前位的数值更新nums,...由于本题没有0,所以代码中减去’A’之后要+1....package leetcode1; /** * Excel表列序号 */ public class LeetCode171 { /** * 进制转换, * 通用规则如下

73410

我说我不会算法,阿里把我挂了。

我们可以想象一个场景,一面面试面到一半,面试官让你反转二叉树,问问现在的自己,你还会。 不扯远了,如果还在上大学的同学可以先以排序和各种的基本数据结构开始入门。...一趟下来,比节点小的左边,比节点大的右边。不断执行这个操作…. 代码实现:支点取中间,使用L和R表示数组的最小和最大位置。不断进行比较,直到找到比支点小(大)的数,随后交换,不断减小范围。...替换后会导致下面的子树发生了变化,因此同样需要进行比较,直至各个节点实现父>子这么一个条件 希尔排序 思路:希尔排序实质就是插入排序的增强版,希尔排序将数组分隔成n组来进行插入排序,**直至该数组宏观上有序...将个位、十位、…分配到桶子,每分配一次就回收一次 递归 递归算法里边用得非常非常多,排序算法的快速排序和归并排序就需要用到递归(至少用递归实现是最方便的)。...想要用递归必须知道两个条件:递归出口(终止递归的条件)和递归表达式(规律) 技巧:递归中常常是将问题切割成两个部分(1和整体的思想),这能够让我们快速找到递归表达式(规律) 汉罗塔实现: 基本数据结构

24920

数据结构和算法学习指南

这句话怎么理解,不是还有散列表、栈、队列、堆、树、图等等各种数据结构? 我们分析问题,一定要有递归的思想,自顶向下,从抽象到具体。...因为那些多样化的数据结构,究其源头,都是链表或者数组的特殊操作,API 不同而已。 比如说「队列」、「栈」这两种数据结构既可以使用链表也可以使用数组实现。...用数组实现,就要处理扩容缩容的问题;用链表实现,没有这个问题,但需要更多的内存空间存储节点指针。 「图」的两种表示方法,邻接表就是链表,邻接矩阵就是二维数组。...邻接矩阵判断连通性迅速,并可以进行矩阵运算解决一些问题,但是如果图比较稀疏的话很耗费空间。邻接表比较节省空间,但是很多操作的效率肯定比不过邻接矩阵。...数据结构种类很多,但它们存在的目的都是不同的应用场景,尽可能高效增删查改。话说这不就是数据结构的使命么? 如何遍历 + 访问?

66740

【面试高频题】二叉树神级遍历入门

题目描述 这是 LeetCode 的「99. 恢复二叉搜索树」,难度为「中等」。...Tag : 「二叉树」、「树的搜索」、「递归」、「迭代」、「中序遍历」、「Morris 遍历」 给你二叉搜索树的根节点 root,该树中的 恰好 两个节点的值被错误交换。...还是以二叉树的中序遍历为例,无论是递归或是迭代,为了遍历完左节点(也可以是左子树)时,仍能回到父节点,我们需要使用数据结构栈,只不过递归做法中是用函数调用充当栈,而在迭代做法则是显式栈。...举个 ,对于一棵最简单的二叉树: 中序遍历过程中,如果选择递归或迭代方式,并且不使用栈的情况,当遍历完左子节点(或左子树的最后一个节点)后,将会面临无法返回根节点的问题。...仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

22030
领券