面试算法
文章平均质量分 85
有人在等你说完那句说一半的话
OnebyWang
无限大な梦のあとの何もない世の中じゃ
展开
-
最长公共子序列
最长公共子序列1、参考资料https://leetcode-cn.com/problems/longest-common-subsequence/2、题目要求题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符原创 2020-09-21 23:50:06 · 208 阅读 · 0 评论 -
数字字符串转化成 IP 地址
数字字符串转化成 IP 地址1、参考资料https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e2、题目要求题目描述现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525511135",返回["255.255.11.135", "255.255.111.35"](顺序没有关系)示例输入"25525511135"输出["255.255.11原创 2020-09-21 11:01:58 · 5372 阅读 · 3 评论 -
对称二叉树
对称二叉树1、参考资料https://leetcode-cn.com/problems/symmetric-tree/2、题目要求题目描述给定一个二叉树,检查它是否是镜像对称的。示例例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶:原创 2020-09-20 22:56:24 · 120 阅读 · 1 评论 -
盛最多水的容器
盛最多水的容器1、参考资料https://leetcode-cn.com/problems/container-with-most-water/2、题目要求题目描述示例:输入:[1,8,6,2,5,4,8,3,7]输出:493、代码思路双指针本题是一道经典的面试题,最优的做法是使用「双指针」,我们从题目给的示例一步一步推导双指针的过程题目中的示例数组为 [1,8,6,2,5,4,8,3,7],我们定义两个指针:leftPointer 和 rightPointer,在初始化原创 2020-09-20 18:53:07 · 125 阅读 · 0 评论 -
翻转二叉树
翻转二叉树1、参考资料https://leetcode-cn.com/problems/invert-binary-tree/2、题目要求题目要求翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编原创 2020-09-19 13:03:05 · 218 阅读 · 0 评论 -
王子与公主
王子与公主1、题目要求题目描述(From JD)示例2、代码思路迷宫问题额,怎么说呢,很像之前老韩讲的迷宫问题,其本质就是递归深度搜索、回溯的过程,因为递归到最深层,我才能知道这条路到底走不走得通,走得通我就 return true; 进行回溯,走不通我就 return false; 进行回溯我们规定函数 boolean findWay(char[][] map, int row, int col) { 用于寻找路径:如果 map[row][col] == 'E' 表示找到公原创 2020-09-19 10:40:13 · 340 阅读 · 2 评论 -
最长回文子串
最长回文子串1、参考资料https://leetcode-cn.com/problems/longest-palindromic-substring/https://blog.csdn.net/u013309870/article/details/70742315https://zhuanlan.zhihu.com/p/38251499https://labuladong.gitbook.io/algo/gao-pin-mian-shi-xi-lie/zui-chang-hui-wen-zi-ch原创 2020-09-18 14:27:49 · 176 阅读 · 1 评论 -
二叉树的最大深度
二叉树的最大深度1、参考资料https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/2、题目要求题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。3、代码思路原创 2020-09-18 14:15:47 · 122 阅读 · 0 评论 -
合并两个有序数组
合并两个有序数组1、参考资料https://leetcode-cn.com/problems/merge-sorted-array/2、题目要求题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中*,*使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nu原创 2020-09-18 10:51:44 · 250 阅读 · 0 评论 -
乘积最大子数组
乘积最大子数组1、参考资料https://leetcode-cn.com/problems/maximum-product-subarray/2、题目要求题目描述给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。原创 2020-09-17 09:38:47 · 457 阅读 · 0 评论 -
最小路径和
最小路径和1、参考资料https://leetcode-cn.com/problems/minimum-path-sum/2、题目要求题目描述给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。**说明:**每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。3、代码思路方法一:深度优先搜索这感原创 2020-09-09 23:56:16 · 831 阅读 · 0 评论 -
只出现一次的数字
只出现一次的数字1、参考资料https://leetcode-cn.com/problems/single-number/2、题目要求题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 43、代码思路方法一:Set 去重遇到一个元素时,先判断其在不在原创 2020-09-09 21:52:19 · 175 阅读 · 0 评论 -
二叉搜索树的第 k 大节点
二叉搜索树的第 k 大节点1、参考资料https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/2、题目描述题目描述给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k原创 2020-09-09 21:40:17 · 916 阅读 · 0 评论 -
最大子序和
最大子序和1、参考资料https://leetcode-cn.com/problems/maximum-subarray/2、题目要求题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。3、代码思路动态规划原创 2020-09-09 18:47:47 · 93 阅读 · 0 评论 -
最长有效括号
最长有效括号1、参考资料https://leetcode-cn.com/problems/longest-valid-parentheses/2、题目要求题目描述给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"3、代码思路动态规划还是老问题:为什么要用动态规划?假如说原创 2020-09-09 17:25:28 · 217 阅读 · 0 评论 -
最长不含重复字符的子字符串
最长不含重复字符的子字符串1、参考资料https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/2、题目要求题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因原创 2020-09-09 15:08:47 · 303 阅读 · 0 评论 -
寻找第 K 大的数
寻找第 K 大的数1、参考资料https://leetcode-cn.com/problems/kth-largest-element-in-an-array/https://www.jianshu.com/p/33ee33ce86992、题目要求题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2原创 2020-09-08 23:17:51 · 204 阅读 · 0 评论 -
链表中环的入口节点
链表中环的入口节点1、参考资料https://www.nowcoder.com/practice/6e630519bf86480296d0f1c868d425adhttps://blog.nowcoder.net/n/c42a259697014745b1688f9c6795d2062、题目要求对于一个给定的链表,返回环的入口节点,如果没有环,返回 null拓展:你能给出不利用额外空间的解法么?3、代码思路方法一:使用 HashSet 记录链表节点地址怎么才算是环的入口?遍历链表,重复出现的原创 2020-09-08 16:29:11 · 381 阅读 · 0 评论 -
零钱兑换
零钱兑换参考资料https://labuladong.gitbook.io/algo/dong-tai-gui-hua-xi-lie/bei-bao-ling-qian题目要求题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例原创 2020-09-07 23:40:32 · 138 阅读 · 0 评论 -
组合总和
组合总和1、预备知识:数组的组合1.1、题目要求求数组的组合,比如数组 [1, 2, 3] 的组合为:[ [1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 2], [1, 2, 3], [1, 3, 3], [2, 2, 2], [2, 2, 3], [2, 3, 3], [3, 3, 3],]1.2、代码思路组合必递归:我们想想求组合的思路是啥?比如说我们要求数组 nums = [1, 2, 3] 的组合,首先以元素 1 打头,然后在数原创 2020-09-07 18:09:57 · 495 阅读 · 0 评论 -
两个链表的第一个公共节点
两个链表的第一个公共节点1、参考资料https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/solution/shuang-zhi-zhen-fa-lang-man-xiang-yu-by-ml-zimingm原创 2020-09-07 14:19:57 · 134 阅读 · 0 评论 -
两个链表生成相加链表
两个链表生成相加链表1、参考资料https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b2、题目要求题目描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。示例1输入[9,3,7]原创 2020-09-04 22:31:19 · 509 阅读 · 0 评论 -
最长上升子序列
最长上升子序列1、参考资料https://leetcode-cn.com/problems/longest-increasing-subsequence/https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-by-leetcode-soluti/2、题目要求题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入:原创 2020-09-06 22:18:48 · 87 阅读 · 0 评论 -
爬楼梯
爬楼梯1、参考资料https://leetcode-cn.com/problems/climbing-stairs/https://segmentfault.com/a/11900000159447502、题目要求题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶原创 2020-09-06 11:18:54 · 115 阅读 · 0 评论 -
搜索插入位置
搜索插入位置1、参考资料https://leetcode-cn.com/problems/search-insert-position/2、题目要求题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4原创 2020-09-05 21:05:33 · 137 阅读 · 0 评论 -
二叉树中是否存在节点和为指定值的路径
二叉树中是否存在节点和为指定值的路径1、从根节点到叶子节点1.1、参考资料https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c1.2、题目要求给定一个二叉树和一个值 target,判断是否有从根节点到叶子节点的节点值之和等于 target 的路径,例如:给出如下的二叉树,target=22,程序运行返回 true,因为存在一条路径 5 ---> 4 ---> 11 ---> 2,其节点路径值为 22原创 2020-09-05 18:12:49 · 1255 阅读 · 0 评论 -
二叉树的之字形层序遍历
二叉树的之字形层序遍历1、参考资料https://www.nowcoder.com/practice/47e1687126fa461e8a3aff8632aa55592、题目要求题目描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如:给定的二叉树是 {3,9,20,#,#,15,7}该二叉树之字形层序遍历的结果是[[3],[20,9],[15,7]]示例输入{1,#,2}输出[[1],[2]]3、代码思路原创 2020-09-05 15:23:32 · 3079 阅读 · 2 评论 -
二分查找
二分查找1、参考资料https://leetcode-cn.com/problems/binary-search/2、题目要求题目描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums =原创 2020-09-04 13:49:46 · 109 阅读 · 0 评论 -
把二叉树打印成多行
把二叉树打印成多行1、参考资料https://www.nowcoder.com/practice/445c44d982d04483b04a54f2987962882、题目要求从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。3、代码思路队列解决广度优先问题~~~题目要求我们返回一个 ArrayList<ArrayList<Integer>> 对象,外层的 ArrayList 对应着二叉树的每一层,内层的 ArrayList 存储着每一层节点的数据我们将原创 2020-09-04 12:46:37 · 144 阅读 · 0 评论 -
合并有序链表
合并有序链表1、参考资料https://www.nowcoder.com/practice/a479a3f0c4554867b35356e0d57cf03d2、题目要求将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,即不开辟新的内存空间3、代码思路首先,为了方便操作链表,我们定义一个 dummyHead,我们遍历两个链表,直到其中有一个到达尾部,则停下来在遍历的过程中,我们将元素值小的节点依次链在 mergerList 的后边,最后,我们看看哪个链表还有剩余的节原创 2020-09-04 10:41:56 · 226 阅读 · 0 评论 -
链表是否有环
链表是否有环1、参考资料https://leetcode-cn.com/problems/linked-list-cycle/2、题目要求题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:he原创 2020-09-04 10:05:06 · 143 阅读 · 0 评论 -
二叉树前中后序遍历
二叉树前中后序遍历1、参考资料https://www.nowcoder.com/practice/a9fec6c46a684ad5a3abd4e365a9d362https://blog.csdn.net/qq407388356/article/details/794892702、题目要求题目描述分别按照二叉树先序,中序和后序打印所有的节点。示例输入{1,2,3}输出[[1,2,3],[2,1,3],[2,3,1]]3、代码思路参照二叉树的深度优先遍历,只不过之前我们需原创 2020-09-03 22:55:32 · 245 阅读 · 0 评论 -
被 90 整除的数
被 90 整除的数1、题目要求2、代码思路能被 90 整除数,满足如下两个特征各位数字之和是 9 的倍数个位数是 0将如上信息带入到本题的条件中,每张卡片要么是 0,要么是 5,要想拼凑出来的正数能被 90 整除,首先必须满足个位有 0,然后高位靠 5 来凑数,并且 5 的个数必须为 9 的整数倍,然后将剩余的零放在低位,即为答案3、代码实现代码/** * @ClassName MaxNumDemo * @Description TODO * @Author Heygo *原创 2020-09-03 21:09:00 · 1323 阅读 · 0 评论 -
二叉树中的最大路径和
二叉树中的最大路径和1、参考资料https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/2、题目要求题目要求:给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null原创 2020-09-03 12:35:31 · 1391 阅读 · 0 评论 -
回文链表
回文链表1、参考资料https://leetcode-cn.com/problems/palindrome-linked-list/2、题目题目要求请判断一个链表是否为回文链表。示例 1:输入:1->2输出:false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?3、代码思路方法一:遍历链表,将其中的数据存入 ArrayList 中,然后对 ArrayLis原创 2020-09-02 22:21:41 · 211 阅读 · 0 评论 -
树的子结构
树的子结构1、参考资料https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/2、题目要求题目描述输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构),条件是:B是A的子结构, 即A中有出现和B相同的结构和节点值。例如:给定的树 A: 3 / \ 4 5 / \ 1 2给定的树 B: 4 / 1返回 true,因为 B 与 A 的一个子树拥有相同的原创 2020-09-01 23:18:33 · 108 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面1、参考资料https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/2、题目要求题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之原创 2020-09-01 20:03:24 · 81 阅读 · 0 评论 -
验证回文串
验证回文串1、参考资料https://leetcode-cn.com/problems/valid-palindrome/2、题目要求给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false3、代码思路我们在字符串 str 上定义双指针,lef原创 2020-09-01 15:33:49 · 203 阅读 · 0 评论 -
二维数组中的查找
二维数组中的查找1、参考资料https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/2、题目要求题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 1原创 2020-08-30 08:58:25 · 995 阅读 · 0 评论 -
矩阵中的路径
矩阵中的路径1、参考资料https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/2、题目要求题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[“a”,“b”,“c”原创 2020-08-29 21:53:04 · 556 阅读 · 0 评论