![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 67
LeetCode刷题刷刷刷
Rainbow-c
这个作者很懒,什么都没留下…
展开
-
算法基础/动态规划1
1.213. 打家劫舍 II题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例:示例1:输入:nums = [2,3,2]输出:3解释:你不能先偷窃 1 号房屋(金额 =.原创 2022-03-20 13:24:39 · 978 阅读 · 0 评论 -
算法基础/递归回溯
1.17. 电话号码的字母组合题目描述:示例:示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]解答描述:该题要找到所有电话号码的字母组合,采用递归+回溯的方式。先用一个vector<string>来存储每个数字和字母的匹配,注意数.原创 2022-03-19 13:11:37 · 281 阅读 · 0 评论 -
算法基础/递归回溯
当要求解全排列或者全部的组合时,常采用递归+回溯的方式。标准的递归+回溯:DFS形式DFS(nums,index)//表示当前位置是index,1)对于每个位置的数,要么被选中,temp.push_back(nums[index],DFS(nums,index+1),回溯的时候,从temp中删除,temp.pop_back().2)要么不被选中,直接递归下一个元素DFS(nums,index+1).3)当当前位置到达num.size()时,将temp数组压入结果中,结束递归。1.原创 2022-03-18 16:49:55 · 437 阅读 · 0 评论 -
算法基础/递归回溯
背下来 !!当模板用!!1.78. 子集题目描述:给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例:示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]解答描述:要求解所有可能的子集,有两种方法,迭代和递归。关键在...原创 2022-03-17 10:50:57 · 104 阅读 · 0 评论 -
算法基础/BFS/DFS
BFS/DFS常用场景区分:DFS常以递归形式实现,因为每次都要将一条路搜索到底后再回溯,所以适合求解所有路径的情况。BFS常借助队列实现,每次将一层一层的向外扩展,所以常用于求解最短路径、求解路径长度和层次遍历中。1.1091. 二进制矩阵中的最短路径题目描述:给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n -原创 2022-03-16 14:38:00 · 273 阅读 · 0 评论 -
算法基础\BFS\DFS
1.200. 岛屿数量题目描述:给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例:示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输.原创 2022-03-14 12:28:58 · 1490 阅读 · 0 评论 -
算法基础/滑动窗口
1.438. 找到字符串中所有字母异位词题目描述:给定两个字符串s和 p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。示例:示例1:输入: s = "cbaebabacd", p = "abc"输出: [0,6]解释:起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。示例 2...原创 2022-03-13 14:16:01 · 442 阅读 · 0 评论 -
算法基础/双指针
1.82. 删除排序链表中的重复元素 II题目描述:给定一个已排序的链表的头head,删除原始链表中所有重复数字的节点,只留下不同的数字。返回已排序的链表。示例:解答描述:删除有序链表中的重复数字的解题思路不难,就是从头开始遍历,跳过所有的重复数字即可。该题难点在于链表的实现上,因为要返回头结点,而头结点head可能会被删除,所以需要开辟一个新的哑结点new_head,new_head->next=head,最终只需要返回new_head->next即可。...原创 2022-03-12 16:12:21 · 1120 阅读 · 0 评论 -
算法基础/二分法
1.153. 寻找旋转排序数组中的最小值题目描述:已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ...,原创 2022-03-11 15:22:44 · 92 阅读 · 0 评论 -
算法基础/二分查找
1.34. 在排序数组中查找元素的第一个和最后一个位置题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回[-1, -1]。进阶:你可以设计并实现时间复杂度为O(log n)的算法解决此问题吗?示例:示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例2:输入:nums = [5,7,7,8,8,1...原创 2022-03-11 14:07:58 · 694 阅读 · 0 评论 -
算法/位运算
1.190. 颠倒二进制位题目描述:颠倒给定的 32 位无符号整数的二进制位。示例:示例 1:输入:n = 00000010100101000001111010011100输出:964176192 (00111001011110000010100101000000)解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596, 因此返回 964176192,其二进制表示形式为 0011100101111000001原创 2022-03-08 10:20:56 · 58 阅读 · 0 评论 -
算法/位运算
1.231. 2 的幂题目描述:给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得n == 2^x ,则认为 n 是 2 的幂次方。示例:示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16示例 3:输入:n = 3输出:false示例 4:输入:n = 4输出:true示例 5:输入:n = 5.原创 2022-03-07 10:43:49 · 56 阅读 · 0 评论 -
算法/动态规划
1.剑指 Offer 46. 把数字翻译成字符串题目描述:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。0 <= num < 2^31示例:示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi"和"m原创 2022-03-06 14:16:29 · 509 阅读 · 0 评论 -
算法/回溯
回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。1.77. 组合题目描述:给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。1 <= n <= 20 1 <= k <= n示例:示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4],..原创 2022-03-05 14:23:01 · 91 阅读 · 0 评论 -
算法/递归
递归:代码简洁,但是理解困难,递归相当于入栈和出栈的过程。需要注意递归结束条件。1.21. 合并两个有序链表题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:解答描述:看代码代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Lis.原创 2022-03-04 14:55:39 · 51 阅读 · 0 评论 -
算法/BFS/DFS
BFS和DFS不同的应用场景:1)BFS:BFS 可以看成是层序遍历。从某个结点出发,BFS 首先遍历到距离为 1 的结点,然后是距离为 2、3、4…… 的结点。因此,BFS 可以用来求最短路径问题。BFS 先搜索到的结点,一定是距离最近的结点。BFS求最短路径问题的模板:depth = 0 # 记录遍历到第几层,也即路径距离while queue 非空: depth++ n = queue 中的元素个数 循环 n 次: node = queue.po原创 2022-03-03 11:28:50 · 494 阅读 · 0 评论 -
算法/BFS/DFS
1.617. 合并二叉树题目描述:给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例:解答描述:该题要将两棵二叉树进行对应位置的合并,那么就必然要分别.原创 2022-03-02 13:57:27 · 65 阅读 · 0 评论 -
算法/BFS/DFS
BFS/DFS常用于二维阵的遍历中,需要根据移动规则(上下左右)来找到所有满足条件且相邻的位置。BFS:常借助队列实现DFS:常递归实现。1.733. 图像渲染题目描述:有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标(sr, sc)表示图像渲染开始的像素值(行 ,列)和一个新的颜色值newColor,让你重新上色这幅图像。为了完成上色工作,从初始坐标开始,记录初始坐标的上下左右四个方向上像素值与初始坐标相同的...原创 2022-03-01 15:31:53 · 184 阅读 · 0 评论 -
算法/滑动窗口
滑动窗口分为不固定窗口大小和固定窗口大小两种:(当要寻找符合某个要求的子串时常用)1)不固定窗口大小:窗口大小会变化,当前窗口不满足要求时,整体向后移。2) 固定窗口大小:窗口大小为一个常数,当前窗口不满足要求时,整体向后移。滑动窗口与双指针不同的地方就在于,双指针的变化方向是双向的,可以左指针向右,也可以右指针向左,而滑动窗口是整个窗口向右移,左右指针同步。1.3. 无重复字符的最长子串题目描述:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例:...原创 2022-02-28 15:24:02 · 881 阅读 · 0 评论 -
算法/双指针
和数组的双指针法不一样的是,链表的双指针由于通常没有尾指针且只能从前往后遍历,不能随机访问,通常设置快慢双指针(通常让一个指针先走,另一个指针再走或者一个指针步调为1,另一个指针步调为2)。1.876. 链表的中间结点题目描述:给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例:示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化..原创 2022-02-27 14:27:52 · 53 阅读 · 0 评论 -
算法/双指针
对于数组/字符数组,当要求在原地进行操作的时候,即空间复杂度为O(n),常考虑双指针法。1.283. 移动零题目描述:给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。示例:示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]解答描述:要求在原地对数组进行操作,考虑双指针法,但...原创 2022-02-26 16:17:54 · 159 阅读 · 0 评论 -
算法/双指针
双指针法:双指针法常用于只遍历一遍数组的条件下,从两端向中间靠近,即时间复杂度O(n)。1.977. 有序数组的平方题目描述:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。设计时间复杂度为O(N)的实现。示例:示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]原创 2022-02-24 17:00:23 · 486 阅读 · 0 评论 -
算法/二分查找
解决情况:当数组有序,要求寻找某个目标值(或者第一个出现该目标值的位置,最后一个出现目标值的位置),且时间复杂度要求O(logn).1.704. 二分查找题目描述:给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。示例:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4输入:...原创 2022-02-23 16:00:56 · 55 阅读 · 0 评论 -
1405最长快乐字符串
题目描述:如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:s 是一个尽可能长的快乐字符串。s 中 最多 有a 个字母 'a'、b个字母 'b'、c 个字母 'c' 。s 中只含有 'a'、'b' 、'c' 三种字母。如果不存在这样的字符串 s ,请返回一个空字符串 ""。示例:输入:a = 1, b = 1, c = 7输出:.原创 2022-02-17 23:09:31 · 432 阅读 · 0 评论 -
540. 有序数组中的单一元素
题目描述:给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。示例:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2解答描述:首先,该题明确要求时间复杂度为O(logn),空间复杂度为O(1),所以显然不能直接全部遍历,而要考虑二分法原创 2022-02-14 14:45:47 · 453 阅读 · 0 评论 -
括号生成-
题目描述:数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]输入:n = 1输出:["()"]解答描述:历尽千帆,归来仍是小垃圾,呜呜呜xx详解看这里:力扣https://leetcode-cn.com/problems/generate-parentheses/solution/hui-su-suan-fa-...原创 2022-01-26 23:20:56 · 53 阅读 · 0 评论 -
实现strStr()
题目描述:实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例:输入:haysta原创 2022-01-24 23:19:36 · 751 阅读 · 0 评论 -
电话号码的字母组合
题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]输入:digits = "2"输出:["a","b","c"]输入:digits = ""输出:[]解答描述:借一张图(图源:通俗易懂+动画演示 17原创 2022-01-23 23:05:49 · 176 阅读 · 0 评论 -
最接近的三数之和
题目描述:给你一个长度为 n 的整数数组nums和 一个目标值target。请你从 nums 中选出三个整数,使它们的和与target最接近。返回这三个数的和。假定每组输入只存在恰好一个解。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。输入:nums = [0,0,0], target = 1输出:0解答描述:该题要找到三数和与target最接...原创 2022-01-23 17:41:11 · 1256 阅读 · 0 评论 -
三数之和/四数之和
题目描述:给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解答描述:该题要找到所有和为0且不重复的三元组。首先,为了去重,需要先对数组进行一个排序,让所有相同元素聚集在一起,便于去重。在这里对数组进行qsort升序排序。...原创 2022-01-23 16:29:20 · 497 阅读 · 0 评论 -
正则表达式匹配
题目描述:给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。示例:输入:s = "aa" p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。输入:s = "aa" p = "a*"输出:true解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a...原创 2022-01-22 22:48:29 · 90 阅读 · 0 评论 -
盛最多水的容器
题目描述:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。Hint:n == height.length 2 <= n <= 105 0 <= height[i] <= 104示例:输入:[1,8,6,2,5,4,8,3,7]输原创 2022-01-21 17:44:43 · 62 阅读 · 0 评论 -
Z字形变换
题目描述:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。示例:输入:s = "PAYPALISHIRING", numRows = 4输出:"PINALSIGYAHRPI"解释:...原创 2022-01-19 16:12:25 · 449 阅读 · 0 评论 -
最长回文子串
题目描述:给你一个字符串 s,找到 s 中最长的回文子串。示例:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。解答描述:根据回文子串的定义,回文子串左右两边是对称相等的,这就意味着,以某个中心为对称轴,分别往左扩展和往右扩展,两边应该是对应相等的。故而,中心扩展法:对于给定的字符串s的每一个字符,分别把他们看做中心对称点,然后分别往左和往右扩展,如果两边对应相等,说明这部分是满足回文子串的定义的,则继续扩展,直到不满足为止,此时的子串长度就原创 2022-01-18 22:44:57 · 135 阅读 · 0 评论