
leetcode
lucky__peng
这个作者很懒,什么都没留下…
展开
-
leetcode747. 至少是其他数字两倍的最大数
leetcode747. 至少是其他数字两倍的最大数找到最大值和次大值,如果最大值至少是次大值的两倍,那其他数字肯定也符合要求python def dominantIndex(self, nums: List[int]) -> int: m1 = m2 = idx = 0 for i, num in enumerate(nums): if num > m1: m1, m2, idx = num,原创 2022-01-13 00:59:24 · 239 阅读 · 0 评论 -
leetcode89. 格雷编码
leetcode89. 格雷编码要求 n 的格雷编码,只需在 n-1 的格雷编码的基础上稍作改动即可具体如下:逆序遍历 n-1 的格雷编码, 将每个数加上 2^(n-1) 再添加到数组中,加法运算也可以使用位运算来做pythondef grayCode(self, n: int) -> List[int]: res = [0,1] for i in range(1,n): for num in reversed(res): res.a原创 2022-01-09 06:54:08 · 193 阅读 · 0 评论 -
[简单遍历] leetcode1614. 括号的最大嵌套深度
leetcode1614. 括号的最大嵌套深度def maxDepth(self, s: str) -> int: cur = res = 0 for i in s: if i == "(": cur += 1 res = max(cur, res) if i == ")": cur -= 1 return res原创 2022-01-07 00:21:38 · 391 阅读 · 0 评论 -
leetcode71. 简化路径 栈应用题
leetcode71. 简化路径def simplifyPath(self, path: str) -> str: names = path.split("/") stack = list() for name in names: # name有"" , ".." , "." 和其他这四种情况 if name == "..": if stack: stack.pop() eli原创 2022-01-06 14:15:00 · 181 阅读 · 0 评论 -
leetcode1576. 替换所有的问号
leetcode1576. 替换所有的问号def modifyString(self, s: str) -> str: arr, m = list(s), len(s) for i in range(m): if arr[i] == "?": # 不能有重复的字符,实际上问号的替换范围不需要从26个字母,只需从3个字母中找即可 for j in "def": if not (i-1>=0原创 2022-01-05 14:17:07 · 260 阅读 · 0 评论 -
一年中的第几天与一周中的第几天
leetcode1154. 一年中的第几天pythondef dayOfYear(self, date: str) -> int: year, month, day = [int(i) for i in date.split("-")] arr = [31,28,31,30,31,30,31,31,30,31,30,31] if year % 400 == 0 or year % 4 == 0 and year % 100 != 0: arr[1] +=原创 2022-01-03 13:09:40 · 306 阅读 · 0 评论 -
leetcode2022. 将一维数组转变成二维数组
leetcode2022. 将一维数组转变成二维数组python一行代码搞定 def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]: return [original[i: i + n] for i in range(0, len(original), n)] if len(original) == m * n else []...原创 2022-01-01 23:00:14 · 455 阅读 · 0 评论 -
leetcode507. 完美数
leetcode507. 完美数1 <= num <= 10^8这题直接枚举就好python if num == 1: return False sum = 1 for i in range(2, ceil(num**0.5)): if num % i == 0: sum += i if i != num/i:原创 2021-12-31 02:21:24 · 269 阅读 · 0 评论 -
leetcode846. 一手顺子
leetcode846. 一手顺子主要思路首先,根据 groupSize 判断手中的牌数是否能够被平分,如不能的话返回False在满足平分条件的基础上,找出牌中数字最小的牌,判断其后的 groupSize - 1 个数字是否存在,如此循环,直到没有牌为止python if len(hand) % groupSize != 0: return False hand.sort() cnt = Counter(hand)原创 2021-12-30 22:35:16 · 114 阅读 · 0 评论 -
leetcode1995. 统计特殊四元组
leetcode1995. 统计特殊四元组从暴力枚举到哈希表到背包,一步一步降低时间复杂度方法一:暴力pythonn, res = len(nums), 0for a in range(n): for b in range(a + 1, n): for c in range(b + 1, n): for d in range(c + 1, n): if nums[a] + nums[b] + nums[c] == n原创 2021-12-29 22:04:06 · 361 阅读 · 0 评论 -
leetcode825. 适龄的朋友
825. 适龄的朋友提示:n == ages.length1 <= n <= 2 * 1041 <= ages[i] <= 120方法一:暴力遍历,n^2时间复杂度jsvar numFriendRequests = function(ages) { let cnt = 0; // 将ages按从大到小排序,这样遍历的时候就满足了ages[y] <= ages[x]这个条件 ages.sort((a,b)=>b-a); for原创 2021-12-27 22:21:59 · 190 阅读 · 0 评论 -
leetcode1078. Bigram 分词
leetcode1078. Bigram 分词简单题代码如下jsvar findOcurrences = function(text, first, second) { const arr = text.split(' '), res = []; for (let i = 0; i < arr.length-2; i++) { if (arr[i] === first && arr[i+1] === second) res.push(arr[i+原创 2021-12-26 00:15:24 · 204 阅读 · 0 评论 -
leetcode1609. 奇偶树
leetcode1609. 奇偶树这道题只要层序遍历二叉树就好,在遍历的过程中判断每层的点是否满足题目给出的条件原创 2021-12-25 14:10:03 · 328 阅读 · 0 评论 -
leetcode区间问题
leetcode630. 课程表 III主要思路每修一门课程,都要保证 这门课程的截止时间 >= 所有已修课程所花的时间总和数据结构:优先级队列代码实现pythonclass Solution: def scheduleCourse(self, courses: List[List[int]]) -> int: courses.sort(key=lambda x:x[1]) arr, sum = list(), 0 for a原创 2021-12-21 11:14:33 · 119 阅读 · 0 评论 -
leetcode1218. 最长定差子序列
1218. 最长定差子序列主要思路动态规划代码实现方法一定义dp数组为:dp[i]是以arr[i]结尾的最长定差子序列的长度javascriptvar longestSubsequence = function(arr, difference) { const dp = new Array(arr.length).fill(1); let res = 1; dp[0] = 1; for (let j = 1; j < arr.length; j++) {原创 2021-11-05 19:36:30 · 141 阅读 · 0 评论 -
leetcode260. 只出现一次的数字 III
leetcode260. 只出现一次的数字 III主要思路异或代码实现var singleNumber = function(nums) { let xor = 0; for (const num of nums) { xor ^= num; } // lsb是两个目标值异或后,保留二进制最低位1的结果。 // 两个目标值的二进制表示在这个最低位1上的数字必然不同 // 这样一来就可以通过 目标值&lsb 来区分两个目标值原创 2021-10-30 09:14:12 · 76 阅读 · 0 评论 -
leetcode869. 重新排序得到 2 的幂
leetcode869. 重新排序得到 2 的幂主要思路将要判断的数字转换成字符串并排序,判断其是否在1到1e9之间所有是2的幂的数字转换成的字符串(该字符串要排序)中代码实现javascriptvar reorderedPowerOf2 = function(n) { const sortNum = num => (num+'').split('').sort((a,b)=>a-b).join(''); const set = new Set(); for原创 2021-10-29 19:31:33 · 287 阅读 · 0 评论 -
leetcode496. 下一个更大元素 I
496. 下一个更大元素 I主要思路利用栈结构, 从结尾开始遍历一遍nums2,就可以知道nums2中每个元素的下一个更大元素。 // map的key是数组元素,value是该数组元素对应的下一个更大元素,没有则为-1 const map = new Map(), stack = []; for (let i = nums2.length - 1; i >= 0; --i) { const num = nums2[i]; while (stack.原创 2021-10-26 20:55:40 · 128 阅读 · 0 评论 -
leetcode74. 搜索二维矩阵
题目地址https://leetcode-cn.com/problems/search-a-2d-matrix/题目描述编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性: 每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,原创 2021-10-25 15:55:25 · 177 阅读 · 0 评论 -
leetcode413. 等差数列划分
题目地址https://leetcode-cn.com/problems/arithmetic-slices/题目描述如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。 例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。示例 1:输入:nums = [1,2,3,4]输出:3解释:nums原创 2021-08-10 15:13:26 · 112 阅读 · 0 评论 -
leetcode231-2的幂
题目地址https://leetcode-cn.com/problems/power-of-two/题目描述给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16示例 3:输入:n = 3输出:false示例 4:输入:n原创 2021-07-07 06:49:16 · 228 阅读 · 0 评论 -
leetcode855. 考场就座
题目地址https://leetcode-cn.com/problems/exam-room/题目描述在考场里,一排有 N 个座位,分别编号为 0, 1, 2, ..., N-1 。当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外,如果考场里没有人,那么学生就坐在 0 号座位上。)返回 ExamRoom(int N) 类,它有两个公开的函数:其中,函数 ExamRoom.seat() 会返回一个 int (整型数原创 2021-07-03 11:51:31 · 283 阅读 · 0 评论 -
leetcode391. 完美矩形
题目地址https://leetcode-cn.com/problems/perfect-rectangle/题目描述我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域。每个矩形用左下角的点和右上角的点的坐标来表示。例如, 一个单位正方形可以表示为 [1,1,2,2]。 ( 左下角的点的坐标为 (1, 1) 以及右上角的点的坐标为 (2, 2) )。示例 1:rectangles = [ [1,1,3,3], [3,1,4,2], [原创 2021-06-29 15:06:45 · 124 阅读 · 0 评论 -
leetcode659. 分割数组为连续子序列
题目地址https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/题目描述给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个长度至少为 3 的子序列,其中每个子序列都由连续整数组成。如果可以完成上述分割,则返回 true ;否则,返回 false 。示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 : 1, 2,原创 2021-06-27 16:23:20 · 114 阅读 · 0 评论 -
leetcode56. 合并区间
题目地址https://leetcode-cn.com/problems/merge-intervals/题目描述以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3]原创 2021-05-27 18:30:54 · 72 阅读 · 0 评论 -
leetcode1024. 视频拼接
题目地址https://leetcode-cn.com/problems/video-stitching/题目描述将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 clips[i][1] 结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们需要将这些片段进行再剪辑,原创 2021-04-28 10:20:12 · 140 阅读 · 0 评论 -
leetcode3. 无重复字符的最长子串
题目地址https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例原创 2021-04-11 16:54:43 · 96 阅读 · 0 评论 -
leetcode567. 字符串的排列
题目地址https://leetcode-cn.com/problems/permutation-in-string/题目描述给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例 2:输入: s1= "ab" s2 = "eidboaoo"输出: False原创 2021-04-08 20:55:44 · 92 阅读 · 0 评论 -
leetcode344. 反转字符串
题目地址https://leetcode-cn.com/problems/reverse-string/题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:原创 2021-04-01 10:25:16 · 100 阅读 · 0 评论 -
leetcode19. 删除链表的倒数第 N 个结点
题目地址https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/题目描述给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:原创 2021-04-01 09:04:15 · 133 阅读 · 0 评论 -
leetcode876. 链表的中间结点
题目地址https://leetcode-cn.com/problems/middle-of-the-linked-list/题目描述给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。注意点当链表节点为偶数个时,按以下方法得到的slow会是第二个中间节点代码实现javascriptvar middleNode = function(head) { let slow = head, fast = head; while原创 2021-03-31 21:55:25 · 85 阅读 · 0 评论 -
leetcode142. 环形链表 II
题目地址https://leetcode-cn.com/problems/linked-list-cycle-ii/题目描述给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。代码实现javascriptvar detectCycle = function(head) { let slow = head, fast = head; while (fast && fast.next) { slow = slow.next;原创 2021-03-31 09:44:48 · 73 阅读 · 0 评论 -
leetcode141. 环形链表
题目地址https://leetcode-cn.com/problems/linked-list-cycle/题目描述给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。代码实现javascriptvar hasCycle = function(head) { let slow = head, fast = head; while (fast && fast.next) { fast = fast原创 2021-03-29 22:58:40 · 82 阅读 · 0 评论 -
leetcode316. 去除重复字母
题目地址https://leetcode-cn.com/problems/remove-duplicate-letters/题目描述给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同示例 1:输入:s = "bcabc"输出:原创 2021-03-29 20:45:20 · 187 阅读 · 0 评论 -
leetcode83删除排序链表中的重复元素
题目地址https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/题目描述存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示: 链表中节点数目在范围 [0, 300] 内原创 2021-03-29 13:27:15 · 124 阅读 · 0 评论 -
leetcode27移除元素
题目地址https://leetcode-cn.com/problems/remove-element/题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用原创 2021-03-29 07:26:34 · 109 阅读 · 0 评论 -
leetcode26删除有序数组中的重复项
题目地址https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可原创 2021-03-27 22:20:02 · 172 阅读 · 0 评论 -
leetcode710黑名单中的随机数
题目地址https://leetcode-cn.com/problems/random-pick-with-blacklist/题目描述给定一个包含 [0,n ) 中独特的整数的黑名单 B,写一个函数从 [ 0,n ) 中返回一个不在 B 中的随机整数。对它进行优化使其尽量少调用系统方法 Math.random() 。提示: 1 <= N <= 1000000000 0 <= B.length < min(100000, N) [0, N) 不包含原创 2021-03-27 16:42:47 · 145 阅读 · 0 评论