LeetCode算法题
然后就去远行吧
我们的目标是星辰大海~
展开
-
leetcode —— 1004. 最大连续1的个数 III
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:10解释:[0,0,1,1,1,原创 2020-11-04 22:15:43 · 293 阅读 · 0 评论 -
Leetcode —— 886. 可能的二分法
给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。示例 1:输入:N = 4, dislikes = [[1,2],[1,3],[2,4]]输出:true解释:group1 [1,4], group2 [2,3]示例2:输原创 2020-10-16 22:12:10 · 363 阅读 · 0 评论 -
leetcode —— 区间加法
假设你有一个长度为 n 的数组,初始情况下所有的数字均为 0,你将会被给出 k 个更新的操作。其中,每个操作会被表示为一个三元组:[startIndex, endIndex, inc],你需要将子数组 A[startIndex … endIndex](包括 startIndex 和 endIndex)增加 inc。请你返回 k 次操作后的数组。示例:输入: length = 5, updates = [[1,3,2],[2,4,3],[0,2,-2]]输出: [-2,0,3,5,3原创 2020-09-14 13:46:29 · 709 阅读 · 0 评论 -
LeetCode —— 60. 第k个排列(Python3)
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutation-sequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。——————————————————原创 2020-09-05 09:43:44 · 448 阅读 · 0 评论 -
LeetCode —— 365. 水壶问题(Python3)
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/water-and-jug-problem著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。...原创 2020-09-04 10:56:21 · 1026 阅读 · 0 评论 -
LeetCode —— 71.简化路径(Python3)
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。来源:力扣(原创 2020-09-03 08:28:10 · 242 阅读 · 0 评论 -
LeetCode —— 148. 排序链表(Python)
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5题目要求时间复杂度为O(nlogn),我们考虑使用排序中的归并排序,归并排序有两种排序方法。第一种是递归形式的归并排序,但是这种方法需要递归操作,所以空间复杂度为O(logn),与题目不原创 2020-08-28 14:56:16 · 338 阅读 · 0 评论 -
LeetCode —— 440. 字典序的第K小数字(Python)
给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。示例 :输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出原创 2020-08-28 13:39:49 · 465 阅读 · 0 评论 -
LeetCode —— 146. LRU缓存机制(Python)
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否可以在 O(1原创 2020-08-28 02:02:25 · 454 阅读 · 0 评论 -
Leetcode —— 208. 实现 Trie (前缀树)(Python)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"); // 返回 truetrie.insert("app"); trie.search("app");原创 2020-08-27 21:29:50 · 281 阅读 · 0 评论 -
LeetCode —— 332. 重新安排行程(Python)
给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。说明:如果存在多种有效的行程,你可以按字符自然排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前;所有的机场都用三个大写字母表示(机场代码);假定所有机票至少存在一种合理的行程;示例 1:输入: [原创 2020-08-27 19:51:26 · 356 阅读 · 1 评论 -
LeetCode —— 1554. 只有一个不同字符的字符串(Python)
给定一个字符串列表 dict ,其中所有字符串的长度都相同。当存在两个字符串在相同索引处只有一个字符不同时,返回 True ,否则返回 False 。进阶:你可以以 O(n*m) 的复杂度解决问题吗?其中 n 是列表 dict 的长度,m 是字符串的长度。示例 1:输入:dict = [“abcd”,“acbd”, “aacd”]输出:true解释:字符串 “abcd” 和 “aacd” 只在索引 1 处有一个不同的字符。示例 2:输入:dict = [“ab”,“cd”,“yz”]原创 2020-08-25 19:47:36 · 1456 阅读 · 0 评论 -
LeetCode —— 面试题 08.12. 八皇后(Python)
设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/eight-queens-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路:class Solution: def __init__(self): self.r原创 2020-08-23 00:39:47 · 285 阅读 · 1 评论 -
LeetCode —— 980. 不同路径 III(Python)
在二维网格 grid 上,有 4 种类型的方格:1 表示起始方格。且只有一个起始方格。2 表示结束方格,且只有一个结束方格。0 表示我们可以走过的空方格。-1 表示我们无法跨越的障碍。返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目。每一个无障碍方格都要通过一次,但是一条路径中不能重复通过同一个方格。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths-iii著作权归领扣网络所有。商原创 2020-08-22 21:54:19 · 475 阅读 · 0 评论 -
LeetCode —— 145. 二叉树的后序遍历【递归与迭代】(Python)
给定一个二叉树,返回它的 后序 遍历。进阶: 递归算法很简单,你可以通过迭代算法完成吗?解法一:递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def __init__(self):原创 2020-08-22 18:40:50 · 270 阅读 · 0 评论 -
LeetCode —— 532. 数组中的K-diff数对(Python)
给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k.示例 1:输入: [3, 1, 4, 1, 5], k = 2输出: 2解释: 数组中有两个 2-diff 数对, (1, 3) 和 (3, 5)。尽管数组中有两个1,但我们只应返回不同的数对的数量。来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob原创 2020-08-21 12:19:20 · 290 阅读 · 0 评论 -
LeetCode —— 257. 二叉树的所有路径(Python)
给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:————————解题思路:(1)用变量string记录从根结点到当前结点经过的结点路径。(2)从根结点开始遍历二叉树,遍历到某一个结点时,如果当前结点不是叶子结点,在变量string中记录当前结点的信息,接着分别遍历当前结点的左子结点和右子结点;# Definition for a binary tree node.# class TreeNode:# def __init__(self原创 2020-08-21 11:43:58 · 1076 阅读 · 0 评论 -
LeetCode —— 897. 递增顺序查找树(Python)
给你一个树,请你 按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。示例 :来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/increasing-order-search-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。————————解题思路:使用中序遍历获得递增序列,然后按顺序构建只有右子结点的树:# Definition for a binary tree原创 2020-08-21 11:24:38 · 276 阅读 · 0 评论 -
Leetcode —— 1469. 寻找所有的独生节点(Python)
二叉树中,如果一个节点是其父节点的唯一子节点,则称这样的节点为 “独生节点” 。二叉树的根节点不会是独生节点,因为它没有父节点。给定一棵二叉树的根节点 root ,返回树中 所有的独生节点的值所构成的数组 。数组的顺序 不限 。示例 1:输入:root = [1,2,3,null,4]输出:[4]解释:浅蓝色的节点是唯一的独生节点。节点 1 是根节点,不是独生的。节点 2 和 3 有共同的父节点,所以它们都不是独生的。来源:力扣(LeetCode)链接:https://leetcod原创 2020-08-21 11:10:13 · 338 阅读 · 0 评论 -
leetcode —— 959. 由斜杠划分区域
在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 “\” 表示。)。返回区域的数目。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/regions-cut-by-slashes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。————————————解题方法(一)——DFS深度遍历:原创 2020-06-25 13:22:39 · 228 阅读 · 0 评论 -
leetcode —— 45. 跳跃游戏 II
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump-game-ii著作权归领扣网络所有。商业转载请原创 2020-06-20 10:15:59 · 227 阅读 · 0 评论 -
leetcode —— 41. 缺失的第一个正数
给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3解题思路:判断数组中是否存在1,如果没有1则直接返回1,结束;如果数组长度为1,同时数组中存在1,则直接返回2,结束;将数组中小于1或者大于数组长度length的数变为1;根据nums[i]的值将nums[nums[i]]对应的数变为负数,表示数组中存在该正数;因为nums[i]的值可能超过数组边界,因此当nums[i]=length时,使nums[0]变为负数;遍历数组,当数组中原创 2020-06-19 13:57:33 · 129 阅读 · 0 评论 -
leetcode —— 40. 组合总和 II
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]来源:力扣(LeetCode)原创 2020-06-19 12:09:12 · 236 阅读 · 0 评论 -
leetcode —— 39. 组合总和
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]解题思路:使用递归+回溯,为了避免组合出现重复,例如示例1中的重复组合[2,2,3原创 2020-06-19 10:00:00 · 143 阅读 · 0 评论 -
leetcode —— 38. 外观数列
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1->12->113->214->12115->1112212中的11表示前一个序列1是由1个1表示的;3中的21表示2中的11是由2个1表示的,依次类推;解题思路:使用递归,要求第n个整数的输出,需要知道第n-1个数的序列,要知道第n-1个数的序列,需要知道第n-2个数的序列,以此类推,直到n=1,返回’1’。具体解题代码如下:# Pythonclass Sol原创 2020-06-19 08:19:12 · 147 阅读 · 0 评论 -
leetcode —— 29. 两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333…) = truncate(3)原创 2020-06-14 14:30:50 · 195 阅读 · 0 评论 -
1074. 元素和为目标值的子矩阵数量
给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。如果 (x1, y1, x2, y2) 和 (x1’, y1’, x2’, y2’) 两个子矩阵中部分坐标不同(如:x1 != x1’),那么这两个子矩阵也不同。来源:力扣(LeetCode)链接:https://leetcode-cn.原创 2020-06-04 22:30:32 · 376 阅读 · 0 评论 -
leetcode —— 209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum著作权归领扣网络所有。商业转载请联系官方授原创 2020-05-18 17:25:40 · 161 阅读 · 0 评论 -
152. 乘积最大子数组
给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-product-subarray著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。————————————解题思路:使用动态规划,维护两个原创 2020-05-18 15:18:29 · 198 阅读 · 0 评论 -
leetcode —— 1025. 除数博弈
爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。示例 1:输入:2输出:true解释:爱丽丝选择 1,鲍勃无法进行操作。来源:力扣(LeetCode原创 2020-05-16 15:12:05 · 199 阅读 · 0 评论 -
leetcode —— 206. 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解法一:迭代法按顺序遍历链表,对于当前节点,使用临时变量保存其指向的下一个节点,然后将其指向的下一个节点改为其上一个节点,其上一个节点也需要用一个变量进行保存。### python# Definition for singly-linked list.# class ListNode:# def __in原创 2020-05-16 13:51:24 · 224 阅读 · 0 评论 -
面试题 08.09. 括号
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。说明:解集不能包含重复的子集。例如,给出 n = 3,生成结果为:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]解题思路:使用递归加回溯,统计出现的不同情况。class Solution: def __init__(self): self.lists = [] def generateParenthesis(self, n: int)原创 2020-05-15 02:08:32 · 225 阅读 · 0 评论 -
面试题64. 求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6大佬的题解:用一个and判断是否继续执行递归,递归函数的作用是计算n-1个数的累加和,递归停止条件是n=1。class Solution: def __init__(self): self.ans = 0 def sumNums(self, n: int) -> int:原创 2020-05-15 00:58:40 · 225 阅读 · 0 评论 -
560. 和为K的子数组
560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。解题思路:创建一个字典,字典的key是前i个值的累加和,字典的value是前i个值的累加和出现的次数统计。对于当前数值,求到当前数值的累加和,并将累加和减去k值,判断这个值是否在字典中,如果在字典中,则将其加入到最终的返回值中。并根据当前值的累加和更新字典中的key原创 2020-05-15 00:44:23 · 177 阅读 · 0 评论 -
leetcode —— 面试题 17.多次搜索
给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions,其中positions[i]为smalls[i]出现的所有位置。示例:输入:big = “mississippi”smalls = [“is”,“ppi”,“hi”,“sis”,“i”,...原创 2020-05-07 15:25:27 · 355 阅读 · 0 评论 -
leetcode —— 1038. 从二叉搜索树到更大和树
给出二叉 搜索 树的根节点,该二叉树的节点值各不相同,修改二叉树,使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。示例:输入:[4,1,6,0,2,5,7,null,null,null,3,null,nu...原创 2020-05-06 16:02:34 · 505 阅读 · 0 评论 -
leetcode —— 1319. 连通网络的操作次数
用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示,其中 connections[i] = [a, b] 连接了计算机 a 和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线 connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计...原创 2020-05-06 13:55:13 · 491 阅读 · 0 评论 -
leetcode —— 979. 在二叉树中分配硬币
给定一个有 N 个结点的二叉树的根结点 root,树中的每个结点上都对应有 node.val 枚硬币,并且总共有 N 枚硬币。在一次移动中,我们可以选择两个相邻的结点,然后将一枚硬币从其中一个结点移动到另一个结点。(移动可以是从父结点到子结点,或者从子结点移动到父结点。)。返回使每个结点上只有一枚硬币所需的移动次数。示例 1:输入:[3,0,0]输出:2解释:从树的根结点开始,我们...原创 2020-05-06 02:41:07 · 278 阅读 · 0 评论 -
leetcode —— 1217. 玩筹码
数轴上放置了一些筹码,每个筹码的位置存在数组 chips 当中。你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以):将第 i 个筹码向左或者右移动 2 个单位,代价为 0。将第 i 个筹码向左或者右移动 1 个单位,代价为 1。最开始的时候,同一位置上也可能放着两个或者更多的筹码。返回将所有筹码移动到同一位置(任意位置)上所需要的最小代价。示例 1:输入:...原创 2020-05-06 00:11:48 · 260 阅读 · 0 评论 -
leetcode —— 965. 单值二叉树
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。输入:[1,1,1,1,1,null,1]输出:true——————————————解题思路:对于当前节点,比较当前节点和左子节点的值是否相同,比较当前节点和右子节点的值是否相同。如果存在不同值,则直接返回False。如果值都相同,则使用递归函数比较其左子...原创 2020-04-25 01:09:35 · 189 阅读 · 0 评论