leetcode
清醒思考
有问题可以私信我.
展开
-
leetcode 287.寻找重复数(python)
leetcode 287.寻找重复数(python)给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字,但它可能不止重复出现一次。原创 2020-12-02 23:26:22 · 267 阅读 · 0 评论 -
leetcode 279.完全平方数(python)
leetcode 279.完全平方数(python)给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3 解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.动态规划class Solution(object): def numSquares(self, n): dp = [0]原创 2020-11-19 22:09:21 · 319 阅读 · 0 评论 -
leetcode 922.按奇偶排序数组 II(python)
leetcode 922.按奇偶排序数组 II(python)给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:输入:[4,2,5,7]输出:[4,5,2,7]解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。提示:2 <= A.length <= 20000A.length % 2原创 2020-11-12 10:52:24 · 227 阅读 · 0 评论 -
leetcode 1356.根据数字二进制下 1 的数目排序(python)
leetcode 1356.根据数字二进制下 1 的数目排序(python)给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。示例 1:输入:arr = [0,1,2,3,4,5,6,7,8]输出:[0,1,2,4,8,3,5,6,7]解释:[0] 是唯一一个有 0 个 1 的数。[1,2,4,8] 都有 1 个 1 。[3,5,6] 有 2 个 1 。原创 2020-11-06 23:40:12 · 229 阅读 · 0 评论 -
leetcode 240.搜索二维矩阵2(python)
leetcode 240.搜索二维矩阵2(python)编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]原创 2020-11-01 19:51:22 · 297 阅读 · 0 评论 -
leetcode 239.滑动窗口最大值(python)
leetcode 239.滑动窗口最大值(python)给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值---------------原创 2020-11-01 13:00:43 · 1062 阅读 · 0 评论 -
leetcode 140.单词拆分2(python)
leetcode 140.单词拆分2(python)给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDict = ["cat", "cats", "and", "sand", "dog"]输出:[ "cats and dog", "cat原创 2020-11-01 11:45:35 · 942 阅读 · 0 评论 -
leetcode 238.除自身以外数组的乘积(python)
leetcode 238.除自身以外数组的乘积(python)给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]**提示:**题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请**不要使用除法,**且在 O(n) 时间复杂度内完成此题。进阶:原创 2020-10-28 23:21:23 · 265 阅读 · 0 评论 -
leetcode 236.二叉树的最近公共祖先(python)
leetcode 236.二叉树的最近公共祖先(python)给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p原创 2020-10-28 23:04:53 · 319 阅读 · 0 评论 -
leetcode 1207.独一无二的出现次数(python)
leetcode 1207.独一无二的出现次数(python)给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入:arr = [-3,0,1,-3,1,1,原创 2020-10-28 21:44:50 · 302 阅读 · 0 评论 -
leetcode 221.最大正方形(python)
leetcode 221.最大正方形(python)在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4动态规划dp方程:dp(i, j) = min(dp(i-1, j) , dp(i, j-1), dp(i-1, j-1)) + 1这个还是很容易想到的, 画个图自己推下就好class Solution(object): def max原创 2020-10-27 16:39:14 · 461 阅读 · 0 评论 -
leetcode 215.数组中的第k个最大元素(python)
leetcode 215.数组中的第k个最大元素(python)在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。1.直接排序class Solution(object): def fi原创 2020-10-27 15:50:15 · 272 阅读 · 0 评论 -
leetcode 144.二叉树的前序遍历(python)
leetcode 144.二叉树的前序遍历(python)给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归class Solution(object): def preorderTraversal(self, root): # 递归 res = [] self.dfs(原创 2020-10-27 14:55:19 · 211 阅读 · 0 评论 -
leetcode 169.多数元素(python)
leetcode 169.多数元素(python)给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2排序找中间数class Solution(object): def majorityElement(self, nums): # 排序找中间数原创 2020-10-26 09:07:16 · 245 阅读 · 0 评论 -
leetcode 1365.有多少小于当前数字的数字(python)
leetcode 1365.有多少小于当前数字的数字(python)给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。示例 1:输入:nums = [8,1,2,2,3]输出:[4,0,1,1,3]解释: 对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。 对原创 2020-10-26 09:00:27 · 305 阅读 · 1 评论 -
leetcode 207.课程表(python)
leetcode 207.课程表(python)你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2,原创 2020-10-25 16:30:00 · 532 阅读 · 0 评论 -
leetcode 845.数组中的最长山脉(python)
leetcode 845.数组中的最长山脉(python)我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)给出一个整数数组 A,返回最长 “山脉” 的长度。原创 2020-10-25 13:15:02 · 355 阅读 · 0 评论 -
leetcode 160.相交链表(python)
leetcode 160.相交链表(python)编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表**:**在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,原创 2020-10-24 09:42:07 · 172 阅读 · 0 评论 -
leetcode 1024.视频拼接(python)
leetcode 1024.视频拼接(python)你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T])。返回所原创 2020-10-24 08:50:53 · 2586 阅读 · 0 评论 -
leetcode 148.排序链表(python)
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递归 + 归并class Solution(object): def sortList(self, head):原创 2020-10-23 23:13:59 · 237 阅读 · 1 评论 -
leetcode 234.回文链表(python)
leetcode 234.回文链表(python)请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?class Solution(object): def isPalindrome(self, head): # 快慢指针, 翻转后面的链表, 然后对比前后部分是否相同 fast原创 2020-10-23 14:50:44 · 134 阅读 · 0 评论 -
leetcode 146.LRU缓存机制(python)
leetcode 146.LRU缓存机制(python)运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,原创 2020-10-21 21:40:40 · 184 阅读 · 0 评论 -
leetcode 142.环形链表2(python)
leetcode 142.环形链表2(python)给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。**说明:**不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1原创 2020-10-21 16:27:13 · 174 阅读 · 1 评论 -
leetcode 925.长安键入(python)
leetcode 925.长安键入(python)你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例 1:输入:name = "alex", typed = "aaleex"输出:true解释:'alex' 中的 'a' 和 'e' 被长按。示例 2:输入:name = "saeed", typed原创 2020-10-21 16:00:15 · 180 阅读 · 0 评论 -
leetcode 139.单词拆分(python)
leetcode 139.单词拆分(python)给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "原创 2020-10-17 23:12:25 · 674 阅读 · 0 评论 -
leetcode 52.N皇后2(python)
leetcode 52.N皇后2(python)n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回 n 皇后不同的解决方案的数量。示例:输入: 4输出: 2解释: 4 皇后问题存在如下两个不同的解法。[ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "...Q", ".Q原创 2020-10-17 22:58:34 · 168 阅读 · 0 评论 -
leetcode 136.只出现一次的数字(python)
leetcode 136.只出现一次的数字(python)给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4异或class Solution(object): def singleNumber(self, nums): # 异或 r原创 2020-10-16 22:18:52 · 169 阅读 · 0 评论 -
leetcode 977.有序数组的平方(python)
leetcode 977.有序数组的平方(python)给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1 <= A.length <= 10000-10000 <= A[i] <= 10000A 已按非递减顺序排序。使用系统排序方法class原创 2020-10-16 22:08:42 · 199 阅读 · 0 评论 -
leetcode 128.最长连续序列(python)
leetcode 128.最长连续序列(python)给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。哈希class Solution(object): def longestConsecutive(self, nums): # 哈希 nums = set(nums)原创 2020-10-15 20:40:55 · 219 阅读 · 0 评论 -
leetcode 116.填充每个节点的下一个右侧节点(python)
leetcode 116.填充每个节点的下一个右侧节点(python)给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:输入:{"$i原创 2020-10-15 20:20:22 · 146 阅读 · 0 评论 -
leetcode 124.二叉树中的最大路径和(python)
leetcode 124.二叉树中的最大路径和(python)给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入:[1,2,3] 1 / \ 2 3输出:6示例 2:输入:[-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出:42原创 2020-10-12 20:46:37 · 216 阅读 · 0 评论 -
leetcode 530.二叉搜索树的最小绝对差(python)
leetcode 530.二叉搜索树的最小绝对差(python)给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。示例:输入: 1 \ 3 / 2输出:1解释:最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。提示:树中至少有 2 个节点。本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nod原创 2020-10-12 19:41:50 · 166 阅读 · 0 评论 -
leetcode 121.买卖股票的最佳时机(python)
leetcode 121.买卖股票的最佳时机(python)给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需原创 2020-10-09 21:03:18 · 269 阅读 · 1 评论 -
leetcode 105.从前序与中序遍历序列构造二叉树(python)
leetcode 105.从前序与中序遍历序列构造二叉树(python)根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7递归# Definition for a binary tree node.# class TreeNode(obj原创 2020-10-09 16:44:52 · 129 阅读 · 0 评论 -
leetcode 101.对称的二叉树(python)
leetcode 101.对称的二叉树(python)给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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进阶:你可以运用递归和迭代两种方法解决这个问题吗?递归class Solution(object):原创 2020-10-07 14:15:53 · 94 阅读 · 0 评论 -
leetcode 96.不同的二叉搜索树(python)
leetcode 96.不同的二叉搜索树(python)给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \原创 2020-10-07 13:58:30 · 66 阅读 · 0 评论 -
leetcode 85.最大矩形(python)
leetcode 85.最大矩形(python)给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输出: 6动态规划class Solution(object): def maximalRectangle(self, matrix):原创 2020-10-07 12:52:55 · 401 阅读 · 0 评论 -
leetcode 79.单词搜索(python)
leetcode 79.单词搜索(python)给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 tru原创 2020-10-04 22:49:12 · 136 阅读 · 0 评论 -
leetcode 2.两数相加(python)
leetcode 2.两数相加(python)给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807class Solu原创 2020-10-04 15:57:01 · 103 阅读 · 1 评论 -
leetcode 771.宝石与石头(python)
leetcode 771.宝石与石头(python)给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。示例 1:输入: J = "aA", S = "aAAbbbb"输出: 3示例 2:输入: J = "z", S = "ZZ"输出: 0注意:S 和 J 最多含有50个字母。J 中原创 2020-10-02 16:24:55 · 238 阅读 · 0 评论