算法面试
文章平均质量分 55
Mr.Jk.Zhang
这个作者很懒,什么都没留下…
展开
-
二叉树的层序遍历I、II
二叉树层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。输入描述:示例:二叉树:[3,9,20,null,null,15,7],输出描述:返回其层次遍历结果:[[3],[9,20],[15,7]]# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):#原创 2021-09-05 01:12:50 · 380 阅读 · 0 评论 -
最长重复子数组、字符串
718. 最长重复子数组给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100class Solution: def findLength(self, nums1: List[int], nums2: L原创 2021-09-05 00:43:04 · 341 阅读 · 0 评论 -
动态规划:不同路径I和II
63. 不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上角到右下角一共原创 2021-09-05 00:41:29 · 275 阅读 · 0 评论 -
删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。返回同样按升序排列的结果链表。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]提示:链表中节点数目在范围 [0, 300] 内-100 <= Node.val <= 100题目数据保证链原创 2021-09-05 00:19:34 · 169 阅读 · 0 评论 -
乘积之和小于K的连续子数组的个数
713. 乘积小于K的子数组给定一个正整数数组 nums和整数 k 。请找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0提原创 2021-09-04 23:37:46 · 459 阅读 · 0 评论 -
递归&回溯 子集、子集II、幂集
78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中原创 2021-09-03 21:58:26 · 350 阅读 · 0 评论 -
LeetCode:回文子串、最长回文子串、最长回文子序列
647. 回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:“abc”输出:3解释:三个回文子串: “a”, “b”, “c”示例 2:输入:“aaa”输出:6解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”提示:输入的字符串长度不会超过 1000 。class Solution: def countSubstr原创 2021-08-24 20:07:57 · 164 阅读 · 0 评论 -
LeetCode: 最长递增子序列(以及子序列个数)、最长连续递增序列、最长连续序列、最长公共子序列(动态规划、二分查找、贪心算法)
300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums原创 2021-08-24 17:37:38 · 1821 阅读 · 0 评论 -
递归&回溯&动态规划:一文详解有关组合,组合求和,排列组合(有无重复元素)等一系列问题
77. 组合给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]提示:1 <= n <= 201 <= k <= nclass Solution: def combine(self, n: i原创 2021-08-20 13:16:15 · 214 阅读 · 0 评论 -
LeetCode: 乘积小于K的子数组、长度最小的子数组
713. 乘积小于K的子数组给定一个正整数数组 nums和整数 k 。请找出该数组内乘积小于 k 的连续的子数组的个数。示例 1:输入: nums = [10,5,2,6], k = 100输出: 8解释: 8个乘积小于100的子数组分别为: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于100的子数组。示例 2:输入: nums = [1,2,3], k = 0输出: 0提原创 2021-08-20 13:10:24 · 189 阅读 · 0 评论 -
动态规划系列:礼物的最大价值,最小路径之后,成本
1774. 最接近目标价格的甜点成本你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则:必须选择 一种 冰激凌基料。可以添加 一种或多种 配料,也可以不添加任何配料。每种类型的配料 最多两份 。给你以下三个输入:baseCosts ,一个长度为 n 的整数数组,其中每个 baseCosts[i] 表示第 i 种冰激凌基料的价格。toppingCosts,一个长度为 m 的整数数组,其中每个 toppingCosts[i]原创 2021-08-14 16:23:10 · 238 阅读 · 0 评论 -
算法面试题:最小差、单词距离(双指针,求最小差距离问题)
最小差给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差示例:输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(11, 8)提示:1 <= a.length, b.length <= 100000-2147483648 <= a[i], b[i] <= 2147483647正确结果在区间 [0, 2147483647] 内解题思路:排序+双指针clas原创 2021-08-03 22:37:55 · 390 阅读 · 0 评论 -
LeetCode 二叉树中的路径和问题:二叉树中的最大路径和、二叉树的所有路径、求根到叶子节点数字之和
LeetCode 112. 路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / ...原创 2021-08-03 22:14:39 · 397 阅读 · 0 评论 -
LeetCode 位运算系列 第一次出现的字符或者数字(I、II、III)、错误集合
错误集合集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。示例 1:输入:nums = [1,2,2,4]输出:[2,3]示例 2:输入:nums = [1,1]输出:[1,2]提示:2 <= nums.length <= 104原创 2021-08-03 22:13:11 · 124 阅读 · 0 评论 -
经典面试题:编辑距离,跳跃游戏
LeetCode 72. 编辑距离题目描述给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1输入:word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’原创 2021-08-03 22:12:36 · 135 阅读 · 0 评论 -
动态规划之打家劫舍问题I,II,III
LeetCode 198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4原创 2021-07-21 21:42:33 · 135 阅读 · 0 评论 -
LeetCode之字符串系列:有效的括号(匹配),有效的括号字符串,括号生成,最长有效的括号(困难)
20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true原创 2021-07-14 21:34:35 · 1269 阅读 · 2 评论 -
剑指Offer&LeetCode:罗马数字转整数以及整数转罗马数字
13. 罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX +原创 2021-07-14 19:26:39 · 123 阅读 · 0 评论 -
滑动窗口系列:最接近的K个数,最接近的三个数之和, 最接近原点的 K 个点
LeetCode 658. 找到 K 个最接近的元素给定一个排序好的数组 arr ,两个整数 k 和 x ,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。整数 a 比整数 b 更接近 x 需要满足:|a - x| < |b - x| 或者|a - x| == |b - x| 且 a < b示例 1:输入:arr = [1,2,3,4,5], k = 4, x = 3输出:[1,2,3,4]示例 2:输入:arr = [1,原创 2021-07-12 19:41:38 · 214 阅读 · 0 评论 -
LeetCode 二叉树中的路径总和问题(判断以及列出所有路径)、二叉树的所有路径、二叉树中的最大路径和
LeetCode 112. 路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / ...原创 2020-05-04 08:27:37 · 400 阅读 · 0 评论 -
LeetCode & 剑指 Offer:数值的整数次方、可被 K 整除的最小整数
剑指 Offer 16. 数值的整数次方实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2−2=1/2∗2=1/4=0.252^{-2} = 1/2*2 = 1/4 = 0.252−原创 2021-07-12 14:21:56 · 115 阅读 · 0 评论 -
Leetcode 4. 寻找两个正序数组的中位数(困难)
4. 寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5示例 3:输原创 2021-07-04 17:48:42 · 71 阅读 · 0 评论 -
LeetCode: 字符串中最大的奇数/偶数
5788. 字符串中的最大奇数给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 “” 。子字符串 是字符串中的一个连续的字符序列。示例 1:输入:num = “52”输出:“5”解释:非空子字符串仅有 “5”、“2” 和 “52” 。“5” 是其中唯一的奇数。示例 2:输入:num = “4206”输出:""解释:在 “4206” 中不存在奇数。示例 3:输入原创 2021-06-20 15:33:34 · 993 阅读 · 0 评论 -
LeetCode & 剑指Offer:盛最多水的容器
11. 盛最多水的容器题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。原创 2021-05-18 10:57:55 · 93 阅读 · 0 评论 -
Top K 解法大全-- 字典+堆
692. 前K个高频单词给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。示例 2:输入: [“the”, “da原创 2021-04-30 14:11:06 · 225 阅读 · 0 评论 -
LeetCode& 面试题:路径求和问题
面试:路径求和III (求和路径)题目: 给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8返回 3。和等于 8 的路径有:5 -> 35原创 2021-03-07 11:15:45 · 153 阅读 · 0 评论