![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
青柠17
这个作者很懒,什么都没留下…
展开
-
二分查找 35. 搜索插入位置 34. 在排序数组中查找元素的第一个和最后一个位置 33. 搜索旋转排序数组
35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例:示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,...原创 2020-04-21 23:25:56 · 231 阅读 · 0 评论 -
回溯算法 39. 组合总和 52. N皇后II
39. 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例:示例 1:输入: candidates = [2,3,6,7], target = ...原创 2020-04-21 14:45:28 · 212 阅读 · 0 评论 -
递归 247. 中心对称数 II
247. 中心对称数 II中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。找到所有长度为 n 的中心对称数。示例:输入: n = 2输出: ["11","69","88","96"]思路:递归根据题目要求n = 1 [‘0’, ‘1’, ‘8’]n = 2 [‘11’, ‘69’, ‘88’, ‘96’]n = 3 [‘101...原创 2020-04-20 23:50:33 · 628 阅读 · 0 评论 -
栈和队列 239. 滑动窗口最大值
239. 滑动窗口最大值给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,2,5,3,6,7], 和 k = 2输出: [3, 3, 2, 5, 5, 6, 7]解释: 滑动窗口的位置 ...原创 2020-04-20 15:18:59 · 147 阅读 · 0 评论 -
数组/列表 74. 搜索二维矩阵 240. 搜索二维矩阵II
74. 搜索二维矩阵思路1:取每行数组的第一个元素与target判断,若target大于当前行第一个元素,且小于下一行第一个元素,则在此行进行匹配。代码实现1:class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: # 特殊情况判断:1、矩阵为空 2、...原创 2020-04-02 00:13:23 · 150 阅读 · 0 评论 -
树 236. 二叉树的最近公共祖先 105. 从前序与中序遍历序列构造二叉树 102. 二叉树的层序遍历
236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例:给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:...原创 2020-04-02 00:11:00 · 192 阅读 · 0 评论 -
树 94. 二叉树的中序遍历 114. 二叉树展开为链表 538/1038. 把二叉搜索树转换为累加树 98. 验证二叉搜索树
94. 二叉树的中序遍历思路1:迭代递归的调用过程是不断往左边走,当左边走不下去了,就打印节点,并转向右边,然后右边继续这个过程。我们在迭代实现时,就可以用栈来模拟上面的调用过程。代码实现1:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self...原创 2020-04-01 20:24:00 · 177 阅读 · 0 评论 -
树 226. 翻转二叉树 617.合并二叉树 101. 对称二叉树
226. 翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路1:递归根据动画图我们可以总结出递归的两个条件如下:终止条件:当前节点为null时返回交换当前节点的左右节点,再递归...原创 2020-03-31 22:00:28 · 126 阅读 · 0 评论 -
树 112. 路径总和 113. 路径总和II 437. 路径总和III
112. 路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 1...原创 2020-03-31 17:13:12 · 145 阅读 · 0 评论 -
树 104. 二叉树的最大深度 110.平衡二叉树 543. 二叉树的直径
104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回它的最大深度 3 思路1:递归递归通式:判断一个节点的最大深度,需要...原创 2020-03-30 14:00:22 · 183 阅读 · 0 评论 -
数组/列表 283. 移动零 566.重塑矩阵 485. 最大连续1的个数
283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]思路1:暴力法遍历列表,遇到零的时候将其移除,并添加到列表末尾代码实现1:class Solution: def moveZ...原创 2020-03-29 13:38:16 · 218 阅读 · 0 评论 -
动态规划 70. 爬楼梯 198. 打家劫舍 120. 三角形最小路径和 62. 不同路径
198. 打家劫舍思路:动态规划代码实现:class Solution: def rob(self, nums: List[int]) -> int: if not nums: return 0 elif len(nums) == 1: return nums[0] else: ...原创 2020-03-26 21:50:04 · 170 阅读 · 0 评论 -
质数问题 204. 计数质数
204. 计数质数统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。思路:埃拉托色尼筛选法要得到自然数n以内的全部质数,必须把不大于根号n的所有质数的倍数剔除,剩下的就是质数。初始化一个存放n个元素的列表 isPrime,元素初始值为1,表示该元素所在的位置索引值是一个质数遍历...原创 2020-03-24 09:54:47 · 212 阅读 · 0 评论 -
字符串 22. 括号生成 17. 电话号码的字母组合
696. 计数二进制子串给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例:示例 1 :输入: "00110011"输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现...原创 2020-03-21 21:43:40 · 184 阅读 · 0 评论 -
整数 7. 整数反转 13.罗马数字转整数 12. 整数转罗马数字
7. 整数反转思路1:使用字符串切片反转代码实现1:class Solution: def reverse(self, x: int) -> int: s = str(x) # 若x < 0,反转之后添加负号,否则直接反转 s = '-' + s[:0:-1] if x < 0 else s[::-1] # 判断是...原创 2020-03-21 15:04:32 · 112 阅读 · 0 评论 -
数组/列表 1. 两数之和 15. 三数之和 169. 多数元素
1. 两数之和思路:遍历一次数组,将数组的值及其索引放入哈希表。遍历第二次数组,利用b = target - a 的关系寻找b是否存在与哈希表,若存在,且索引与a不同,则返回。代码实现:class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: hash_map =...原创 2020-03-20 18:33:58 · 145 阅读 · 0 评论 -
字符串(滑动窗口) 3. 无重复字符的最长子串
3. 无重复字符的最长子串思路1:切片实现滑动窗口(时间复杂度O(n2)O(n^2)O(n2))定义一个滑动窗口列表,遍历字符串:若字符不在窗口中,则添加,扩展窗口;若字符已经在窗口中,则将窗口先缩减到窗口列表中字符出现位置的下一字符处,再添加当前字符,保证窗口列表中无重复字符。代码实现1:class Solution(object): def lengthOfLongestS...原创 2020-03-19 16:48:05 · 213 阅读 · 0 评论 -
字符串 9. 回文数 409. 最长回文串 647. 回文子串 5. 最长回文子串
9. 回文数判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例:示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是...原创 2020-03-18 19:51:30 · 244 阅读 · 0 评论 -
字符串 696. 计数二进制子串 482. 密钥格式化 242.有效的字母异位词 205. 同构字符串 290. 单词规律
242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词(字符串长度相等、位置不同)。示例:示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false思路1:排序判断两字符串长度是否相等,若不相等,直接返回Fals...原创 2020-03-18 15:50:46 · 196 阅读 · 0 评论 -
栈和队列 496. 下一个更大元素I 503.下一个更大元素II 739.每日温度
496. 下一个更大元素I给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例:输入: nums1 = [4,1,2], nums2 ...原创 2020-03-17 14:09:59 · 313 阅读 · 0 评论 -
栈和队列 20. 有效的括号
20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串(含空字符串)需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。思路:栈+哈希遇到左括号入栈,遇到右括号时将对应栈顶左括号出栈,这样遍历完之后,栈应为空。建立哈希表构建左右括号对应关系,用于配对。边界问题:栈为空时,无法执行pop(...原创 2020-03-16 23:21:40 · 76 阅读 · 0 评论 -
栈和队列 232. 用栈实现队列 225.用队列实现栈 155. 最小栈
232. 用栈实现队列使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。思路:栈为后进先出(LIFO),因此栈的pop()方法和top()方法都是针对栈顶元素,即append()的最后一个元素。而队列的pop()方法和peek()方法是针对...原创 2020-03-12 19:34:36 · 125 阅读 · 0 评论 -
链表 206. 反转链表 147. 对链表进行插入排序 148. 排序链表(归并排序)
206. 反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路:双指针迭代申请两个指针pre和cur,将cur指针指向pre,同时将两个指针一起向前移动。迭代完成时,cur=None,此时pre即为链表头部。代码实现:class Sol...原创 2020-03-12 12:57:57 · 114 阅读 · 0 评论 -
链表 876. 链表的中间结点 2. 两数相加
2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 ->...原创 2020-03-12 12:57:19 · 98 阅读 · 0 评论 -
链表 83. 删除排序链表中的重复元素 203. 移除链表元素 19. 删除链表的倒数第N个节点
83. 删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例:输入: 1->1->2->3->3输出: 1->2->3思路:双指针方式考虑特殊情况——链表为空,直接返回。使用cur和l两个指针,cur指针不断往前走,当cur指针和l指针的元素相等时啥都不做;不等时,将此时的cur作为l指针的next,然...原创 2020-03-09 23:36:30 · 99 阅读 · 0 评论 -
链表 160.相交链表 21.合并两个有序链表 24. 两两交换链表中的节点
160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:思路:双指针方式将a和b两个链表串联起来,将b链表的尾巴指向a节点的头部,将a节点的尾巴指向b链表的头部。定义两个指针,一个从a链表头出发,一个从b链表头出发,因为是环形的,最终两个链表会相遇,而相遇的节点就是相交的节点。代码实现:class Solution(object): def get...原创 2020-02-29 23:30:42 · 172 阅读 · 0 评论