一天一道算法题
关注微信公众号“算法岗从零到无穷”,带你拿大厂offer
不困先生说
这个作者很懒,什么都没留下…
展开
-
一文解决面试高频的:搜索旋转排序数组问题
本文部分参考:https://imageslr.github.io/2020/03/06/leetcode-33.html#%E6%80%BB%E7%BB%93今天带来搜索旋转排序数组题的总结,:LeetCode 33 题:搜索旋转排序数组LeetCode 81 题:搜索旋转排序数组-iiLeetCode 153 题:寻找旋转排序数组中的最小值LeetCode 154 题:寻找旋转排序数组中的最小值-ii这几道题可以分为三类:33和81题属于搜索特定值,153和154题属于搜索最小值,81和原创 2020-11-17 19:40:31 · 293 阅读 · 0 评论 -
什么是汉明重量
191. 位1的个数 【简单题】【位运算】编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。输入:00000000000000000000000010000000输出:1解释:输入的二进制串 0000000000000000000000001000.原创 2020-09-02 21:14:17 · 2562 阅读 · 2 评论 -
两百天两百题大挑战之1——岛屿数量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ru5RQP5U-1598504889842)(https://imgkr2.cn-bj.ufileos.com/ce31ca72-fdfd-4a64-bc9e-4630961c2eea.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=C0dLRkKxLBZXVWZRkaL1RmT315c%253D&Expires=1原创 2020-08-29 15:38:59 · 169 阅读 · 0 评论 -
力扣杯春季全国编程大赛【签到题】讲解
4月25日leetcode中文社区举行了力扣杯2020春季全国编程大赛,这次大赛让小猿见识到了神人的存在,比如下面这位大神,一个人一支队伍,还取得了第一,真大佬。今天就为我的读者朋友们带来这次比赛的签到题,虽然代码很简单,但是思考的过程还是很有趣的。题目描述某互联网公司一年一度的春招开始了,一共有n名面试者入选。每名面试者都会提交一份简历,公司会根据提供的简历资料产生一个预估的能力值,数...原创 2020-04-25 20:16:36 · 1038 阅读 · 0 评论 -
面试题 10.11. 峰与谷
面试题 10.11. 峰与谷 【中等题】【数组】在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 6, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组,将该数组按峰与谷的交替顺序排序。输入: [5, 3, 1, 2, 3]输出: [5, 1, 3, 2, 3]题目讲解【历史重...原创 2020-04-14 22:07:31 · 321 阅读 · 0 评论 -
不同的二叉搜索树
不同的二叉搜索树【中等题】给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 ...原创 2020-03-30 20:16:05 · 123 阅读 · 0 评论 -
877. 石子游戏
877. 石子游戏 【中等题】亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯...原创 2020-03-21 21:14:14 · 230 阅读 · 0 评论 -
17. 电话号码的字母组合
17. 电话号码的字母组合 【中等题】【回溯】给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].题目讲解【历史重难点题目】历史重难点题目总结【核心思想】...原创 2020-03-21 09:25:35 · 165 阅读 · 0 评论 -
79. 单词搜索
79. 单词搜索 【中等题】【深搜】给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 ...原创 2020-03-18 11:14:32 · 136 阅读 · 0 评论 -
逆康托展开
60. 第k个排列 【中等题】给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。输入: n = 3, k = 3输出: "213"输入: n = 4, k = 9输出: "2314...原创 2020-03-17 19:43:52 · 146 阅读 · 0 评论 -
40. 组合总和 II
40. 组合总和 II 【中等题】【回溯】给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。输入: candidates = [10,1,2,7,6,1,5],...原创 2020-03-15 14:37:49 · 157 阅读 · 0 评论 -
22. 括号生成
22. 括号生成 【中等题】【回溯】给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]题目讲解【历史重难点题目】历史重难点题目总结【核心思想】当左括号数小于n时,加左括号...原创 2020-03-14 22:18:14 · 174 阅读 · 0 评论 -
39. 组合总和
39. 组合总和 【中等题】【回溯】给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。输入: candidates = [2,3,6,7], target ...原创 2020-03-14 21:52:46 · 170 阅读 · 0 评论 -
如何用一个数组实现三个栈
面试题 03.01. 三合一 【简单题】三合一。描述如何只用一个数组来实现三个栈。你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。构造函数会传入一个stackSize参数,代表每个栈的大小。 输入:["TripleInOne", ...原创 2020-03-13 22:02:29 · 643 阅读 · 0 评论 -
337. 打家劫舍 III
337. 打家劫舍 III 【中等题】【动态规划】在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能...原创 2020-03-11 16:35:20 · 95 阅读 · 0 评论 -
美团面试题
470. 用 Rand7() 实现 Rand10() 【中等题】【概率】曾经面美团的时候被问了一道概率题,后来在刷题的时候发现是leetcode的470题,特此拿出来和大家探讨。已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。不要使用系统的 Math.random() 方法rand7()已经定义,返...原创 2020-03-11 12:55:39 · 2209 阅读 · 0 评论 -
【打家劫舍系列】问题二
213. 打家劫舍 II 【中等题】【动态规划】你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。输入: ...原创 2020-03-10 16:58:26 · 301 阅读 · 0 评论 -
【打家劫舍系列】问题一
198. 打家劫舍 【简单题】【动态规划】你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 ...原创 2020-03-10 11:36:55 · 173 阅读 · 0 评论 -
稀疏相似度
面试题 17.26. 稀疏相似度 【困难题】【创新】两个(具有不同单词的)文档的交集(intersection)中元素的个数除以并集(union)中元素的个数,就是这两个文档的相似度。例如,{1, 5, 3} 和 {1, 7, 2, 3} 的相似度是 0.4,其中,交集的元素有 2 个,并集的元素有 5 个。给定一系列的长篇文档,每个文档元素各不相同,并与一个 ID 相关联。它们的相似度非常...原创 2020-03-09 21:35:04 · 442 阅读 · 0 评论 -
面试题 16.05. 阶乘尾数
面试题 16.05. 阶乘尾数 【简单题】【数学】设计一个算法,算出 n 阶乘有多少个尾随零。输入: 3输出: 0解释: 3! = 6, 尾数中没有零。输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.题目讲解【历史重难点题目】历史重难点题目总结【核心思想】数5的个数【思路】尾数的0都是某一个数乘以10得到的只有5和一个偶数相乘会...原创 2020-03-08 22:42:15 · 431 阅读 · 0 评论 -
面试题 08.06. 汉诺塔问题
面试题 08.06. 汉诺塔问题 【简单题】【递归】在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:(1) 每次只能移动一个盘子;(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。请编写程序,用栈将...原创 2020-03-07 11:03:07 · 430 阅读 · 0 评论 -
310. 最小高度树
310. 最小高度树 【中等题】【拓扑排序】对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。格式该图包含 n 个节点,标记为 0 到 n - 1。给定数字 n 和一个无向边 edges 列表(每一个边都是一对标签)。你可以假设没有重复的边...原创 2020-03-06 22:38:31 · 270 阅读 · 0 评论 -
拓扑排序:210. 课程表
210. 课程表 II 【中等题】【拓扑排序】现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。输...原创 2020-03-05 22:02:17 · 158 阅读 · 0 评论 -
拓扑排序:207. 课程表
207. 课程表 【中等题】【拓扑排序】现在你总共有 n 门课需要选,记为 0 到 n-1。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习?输入: 2, [[1,0]] 输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完...原创 2020-03-04 13:28:57 · 204 阅读 · 0 评论 -
丑数
面试题49. 丑数 【中等题】【动态规划】我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。(1是特殊的丑数)输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。题目讲解【核心思想】动态规划【思路】定义三个指针p2,p3,p5,p2指向的...原创 2020-03-01 11:03:58 · 137 阅读 · 0 评论 -
编辑距离 五种解法
72. 编辑距离 【困难题】【动态规划】给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符,删除一个字符,替换一个字符输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rorse (将 'h' 替换为 'r')rors...原创 2020-02-29 13:06:27 · 458 阅读 · 1 评论 -
字典树(前缀树)
208. 实现 Trie (前缀树) 【中等题】实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falset...原创 2020-02-28 13:24:56 · 150 阅读 · 0 评论 -
二叉树遍历的递归与非递归解法
今天为大家总结了二叉树前中后序遍历的递归与迭代解法:1. 前序遍历递归List<Integer> list=new ArrayList<>();public List<Integer> preOrder(TreeNode root ){ if(root == null) return list; list.add(root...原创 2020-02-27 11:54:33 · 209 阅读 · 0 评论 -
二叉树的后序遍历(非递归)
145. 二叉树的后序遍历 【困难题】【后序遍历】给定一个二叉树,返回它的 后序 遍历。输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]题目讲解解法1:递归【代码】List<Integer> list=new ArrayList<>();public List<Intege...原创 2020-02-27 11:40:16 · 142 阅读 · 0 评论 -
二叉树的右视图
199. 二叉树的右视图 【中等题】【层次遍历】给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 &l...原创 2020-02-26 13:16:45 · 132 阅读 · 0 评论 -
接雨水
42. 接雨水 【困难题】【双指针】给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6题目讲解解法一【暴力解】【核心思想...原创 2020-02-25 11:56:35 · 183 阅读 · 0 评论 -
盛最多水的容器
11. 盛最多水的容器 【中等题】【双指针】给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,...原创 2020-02-25 11:15:22 · 96 阅读 · 0 评论 -
合法二叉搜索树
面试题 04.05. 合法二叉搜索树 【中等题】【中序遍历】实现一个函数,检查一棵二叉树是否为二叉搜索树。输入: 2 / \ 1 3输出: true输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根节点的值为 5 ,但是其右子节点...原创 2020-02-24 11:31:45 · 265 阅读 · 0 评论 -
最短超串
面试题 17.18. 最短超串 【中等题】假设你有两个数组,一个长一个短,短的元素均不相同。找到长数组中包含短数组所有的元素的最短子数组,其出现顺序无关紧要。返回最短子数组的左端点和右端点,如有多个满足条件的子数组,返回左端点最小的一个。若不存在,返回空数组。输入:big = [7,5,9,0,2,1,3,5,7,9,1,1,5,8,8,9,7]small = [1,5,9]输出:...原创 2020-02-23 22:02:04 · 511 阅读 · 0 评论 -
面试题 04.10. 检查子树
面试题 04.10. 检查子树 【中等题】【递归】检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断 T2 是否为 T1 的子树。如果 T1 有这么一个节点 n,其子树与 T2 一模一样,则 T2 为 T1 的子树,也就是说,从节点 n 处把树砍断,得到的树与 T2 完全相同。输入:t1 = [1, 2, 3], t2 = [2]输出:true...原创 2020-02-23 14:47:09 · 150 阅读 · 0 评论 -
面试题 16.24. 数对和
面试题 16.24. 数对和 【中等题】【双指针】设计一个算法,找出数组中两数之和为指定值的所有整数对。一个数只能属于一个数对。输入: nums = [5,6,5], target = 11输出: [[5,6]]输入: nums = [5,6,5,6], target = 11输出: [[5,6],[5,6]]题目讲解【核心思想】双指针一个从前往后,一个从后往前【数...原创 2020-02-22 17:23:19 · 213 阅读 · 0 评论 -
面试题 08.11. 硬币
面试题 08.11. 硬币 【中等题】【动态规划】给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)输入: n = 5输出:2解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1输入: n = 10输出:4解释: 有四种方式可以凑成总金额:10=1010=5+510=5...原创 2020-02-21 17:46:56 · 492 阅读 · 0 评论 -
面试题59 - I. 滑动窗口的最大值
面试题59 - I. 滑动窗口的最大值 【困难】吐槽:这道题与LeetCode239 题相同,但是那道题标的困难题,这道题标的简单题,搞不懂搞不懂给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 ...原创 2020-02-20 17:11:12 · 219 阅读 · 0 评论 -
面试题68 - II. 二叉树的最近公共祖先
面试题68 - II. 二叉树的最近公共祖先 【简单题】【递归】给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,nu...原创 2020-02-19 12:48:28 · 141 阅读 · 0 评论 -
面试题41. 数据流中的中位数
面试题41. 数据流中的中位数 【困难题】【大顶堆小顶堆】如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4] 的中位数是 3;[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void ...原创 2020-02-18 13:12:34 · 162 阅读 · 0 评论