- 博客(280)
- 收藏
- 关注
原创 LeetCode 1893 检查区域内所有整数都被覆盖
难度简单89收藏分享切换为英文接收动态反馈给你一个二维整数数组ranges和两个整数left和right。每个ranges[i] = [starti, endi]表示一个从starti到endi的闭区间。如果闭区间[left, right]内每个整数都被ranges中至少一个区间覆盖,那么请你返回true,否则返回false。已知区间ranges[i] = [starti, endi],如果整数x满足starti<= x &l...
2021-07-24 16:53:05 182
原创 LeetCode 220 存在重复元素3
给你一个整数数组 nums 和两个整数k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。示例1:输入:nums = [1,2,3,1], k = 3, t = 0输出:true示例 2:输入:nums = [1,0,1,1], k = 1, t = 2输出:true示例 3:输入:nums =...
2021-04-19 08:10:23 181
原创 LeetCode 153 寻找旋转排序数组的最小值
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 4 次,则可以得到 [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], ..., a[n-2]] 。给你一个元素值 互不相同 的数组
2021-04-08 08:06:45 185
原创 LeetCode 面试题17.21 直方图的水量
给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6class Solution {public: int trap(vector<int>& height) { .
2021-04-02 08:39:24 137
原创 LeetCode 190 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 2中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。进阶:如果多次调用这个函数,你将如何优化你的算法?示例 1:输...
2021-03-29 08:21:24 80
原创 LeetCode_173_二叉搜索树迭代器
实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。int next()将指针向右移动,然后返回指针处的数字。
2021-03-28 08:39:30 106
原创 LeetCode 1603 设计停车系统
请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。请你实现ParkingSystem类:ParkingSystem(int big, int medium, int small)初始化ParkingSystem类,三个参数分别对应每种停车位的数目。bool addCar(int carType)检查是否有carType对应的停车位。carType有三种类型:大,中,小,分别用数字1,2和3表示。一辆车只能停在...
2021-03-19 08:10:57 89
原创 LeetCode 115 不同的子序列
给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE"是"ABCDE"的一个子序列,而"AEC"不是)题目数据保证答案符合 32 位带符号整数范围。示例1:输入:s = "rabbbit", t = "rabbit"输出:3解释:如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。(上箭头符号 ^ 表示选...
2021-03-17 08:15:18 111
原创 LeetCode 706 设计哈希映射
不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。void remove(key) 如果映射中存在 ke
2021-03-14 09:05:38 109
原创 LeetCode 132 分割字符串2
给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文。返回符合要求的最少分割次数。示例 1:输入:s = "aab"输出:1解释:只需一次分割就可将s 分割成 ["aa","b"] 这样两个回文子串。示例 2:输入:s = "a"输出:0示例 3:输入:s = "ab"输出:1这个需要用到两次动态规划,第二次没有必要搭建二维数组。一位数组够用了,可以减小时间复杂度。from typing import *import sys...
2021-03-08 08:24:05 158
原创 LeetCode 503 下一个更大元素2
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。from typing import *from co.
2021-03-06 07:44:04 106
原创 LeetCode 354 俄罗斯套娃信封问题
给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。注意:不允许旋转信封。示例 1:输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]输出:3解释:最多信封的个数为 3, 组合为:.
2021-03-05 19:19:47 144
原创 LeetCode 338 比特位计数
给定一个非负整数num。对于0 ≤ i ≤ num 范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例2:输入: 5输出: [0,1,1,2,1,2]from typing import *class Solution: def countBits(self, num: int) -> List[int]: dp=[0]*(num+1) highest=0...
2021-03-03 08:46:35 134
原创 LeetCode 416 分割等和子集
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.这道题是套了个包装的01背包问题,解决方法:from typing import..
2021-03-01 19:02:05 98
原创 LeetCode 1658 将x减到0最小操作数
给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。如果可以将 x恰好 减到0 ,返回 最小操作数 ;否则,返回 -1 。示例 1:输入:nums = [1,1,4,2,3], x = 5输出:2解释:最佳解决方案是移除后两个元素,将 x 减到 0 。示例 2:输入:nums = [5,6,7,8,9], x = 4输出:-1示例 3:输...
2021-02-25 10:08:39 221
原创 LeetCode 940 不同的子序列2
给定一个字符串S,计算S的不同非空子序列的个数。因为结果可能很大,所以返回答案模 10^9 + 7.示例 1:输入:"abc"输出:7解释:7 个不同的子序列分别是 "a", "b", "c", "ab", "ac", "bc", 以及 "abc"。示例 2:输入:"aba"输出:6解释:6 个不同的子序列分别是 "a", "b", "ab", "ba", "aa" 以及 "aba"。示例 3:输入:"aaa"输出:3解释:3 个不同的子序列分别是 "a", ...
2021-02-23 10:55:29 111
原创 LeetCode 1438 绝对差不超过限制的最长连续子数组
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。示例 1:输入:nums = [8,2,4,7], limit = 4输出:2解释:所有子数组如下:[8] 最大绝对差 |8-8| = 0 <= 4.[8,2] 最大绝对差 |8-2| = 6 > 4.[8,2,4] 最大绝对差 |8-2| = 6 > 4....
2021-02-21 14:45:09 124
原创 连续1的最大个数3_1004
给定一个由若干 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...
2021-02-15 14:26:47 82
原创 LeetCode 1208 尽可能使字符串相等
给你两个长度相同的字符串,s 和 t。将 s中的第i个字符变到t中的第 i 个字符需要|s[i] - t[i]|的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可以转化的最大长度。如果 s 中没有子字符串可以转化成 t 中对应的子字符串,则返回 0。双指针法:...
2021-02-06 10:38:32 125
原创 LeetCode 31 栈的压入,弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), pu.
2021-01-24 18:07:44 76
原创 LeetCode 264 丑数2
编写一个程序,找出第n个丑数。丑数就是质因数只包含2, 3, 5的正整数。两种方法,堆和动态规划动态规划:class Solution: def nthUglyNumber(self, n: int) -> int: i2, i3, i5 = 0, 0, 0 arr = [1] for j in range(1, n): val = min(arr[i2] * 2, arr[i3] * 3, ar...
2021-01-23 18:58:10 79
原创 LeetCode 628 三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24from typing import *class Solution: def maximumProduct(self, nums: List[int]) -> int: nums.sort() return max(nums[0]*nums[1]*nums[-1],nums[-
2021-01-20 08:10:35 72
原创 LeetCode 1727 重新排列后的最大子矩阵
给你一个二进制矩阵matrix,它的大小为m x n,你可以将 matrix中的 列按任意顺序重新排列。请你返回最优方案下将 matrix重新排列后,全是 1的子矩阵面积。输入:matrix = [[0,0,1],[1,1,1],[1,0,1]]输出:4解释:你可以按照上图方式重新排列矩阵的每一列。最大的全 1 子矩阵是上图中加粗的部分,面积为 4 。from typing import *import sysclass Solution: def...
2021-01-18 14:19:24 108
原创 LeetCode 1726 同积元组
给你一个由 不同 正整数组成的数组 nums ,请你返回满足a * b = c * d 的元组 (a, b, c, d) 的数量。其中 a、b、c 和 d 都是 nums 中的元素,且 a != b != c != d 。示例 1:输入:nums = [2,3,4,6]输出:8解释:存在 8 个满足题意的元组:(2,6,3,4) , (2,6,4,3) , (6,2,3,4) , (6,2,4,3)(3,4,2,6) , (3,4,2,6) , (3,4,6,2) , (4,3,6,..
2021-01-18 13:57:42 196 1
原创 LeetCode 375 猜数字大小2
375. 猜数字大小 II难度中等227我们正在玩一个猜数游戏,游戏规则如下:我从1到n之间选择一个数字,你来猜我选了哪个数字。每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了。然而,当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。直到你猜到我选的数字,你才算赢得了这个游戏。class Solution: def getMoneyAmount(self, n: int) -> int: dp = [[0] * (n +...
2021-01-15 19:17:33 95
原创 LeetCode 1722 执行交换操作后的最小汉明距离
给你两个整数数组 source 和 target ,长度都是 n 。还有一个数组 allowedSwaps ,其中每个 allowedSwaps[i] = [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi(下标从 0 开始)的两个元素。注意,你可以按 任意 顺序 多次 交换一对特定下标指向的元素。相同长度的两个数组source 和 target 间的 汉明距离 是元素不同的下标数量。形式上,其值等于满足source[i] != target[i] (下标从 0 开始)的下..
2021-01-14 14:04:17 165
原创 LeetCode 1601 交换数字
编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。示例:输入: numbers = [1,2]输出: [2,1]from typing import *class Solution: def swapNumbers(self, numbers: List[int]) -> List[int]: numbers[0] = numbers[0] ^ numbers[1] numbers[1] = numbers
2021-01-14 10:41:38 94
原创 LeetCode 1310 子数组异或查询
有一个正整数数组arr,现给你一个对应的查询数组queries,其中queries[i] = [Li,Ri]。对于每个查询i,请你计算从Li到Ri的XOR值(即arr[Li] xor arr[Li+1] xor ... xor arr[Ri])作为本次查询的结果。并返回一个包含给定查询queries所有结果的数组。from typing import *class Solution: def xorQueries(self, arr: List[...
2021-01-14 10:32:31 82
原创 LeetCode 1018 可被5整除的二进制前缀
给定由若干0和1组成的数组 A。我们定义N_i:从A[0] 到A[i]的第 i个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表answer,只有当N_i可以被 5整除时,答案answer[i] 为true,否则为 false。示例 1:输入:[0,1,1]输出:[true,false,false]解释:输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为真...
2021-01-14 08:21:21 80
原创 LeetCode 189 旋转数组
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为O(1) 的原地算法解决这个问题吗?from typing import *class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, mo...
2021-01-13 19:35:29 62
原创 LeetCode 239 滑动窗口的最大值
给你一个整数数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。from typing import *from collections import dequeclass Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: que=deque([...
2021-01-06 10:28:24 65
原创 CSDN 605 种花问题
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数n。能否在不打破种植规则的情况下种入n朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,0,1], n = 1输出: True示例 2:输入: flowerbed = [1,0,0,0,1], n = 2输出: Fals...
2021-01-01 16:43:40 76
原创 LeetCode 1111 有效括号的嵌套深度
有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。详情参见题末「嵌套深度」部分。有效括号字符串类型与对应的嵌套深度计算方法如下图所示:给你一个「有效括号字符串」 seq,请你将其分成两个不相交的有效括号字符串,A 和B,并使这两个字符串的深度最小。不相交:每个 seq[i] 只能分给 A 和 B 二者中的一个,不能既..
2020-12-23 10:17:57 133
原创 LeetCode 316 去除重复字母
给你一个字符串s,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。利用单调栈实现。有关键点,如果一个字母已经在栈中出现了,那么该字母就不应该和栈顶元素比较了。记录每个元素剩余个数。from collections import defaultdictclass Solution: def removeDuplicateLetters(self, s: str) -> str: cnt...
2020-12-20 10:15:52 264 3
原创 LeetCode 48 旋转图像
给定一个 n×n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]示例 2:给定 matrix =[ [ 5, 1, 9,11], [ 2, 4, 8,10]...
2020-12-19 10:58:32 147 1
原创 leetCode 714 买卖股票的最佳时机含手续费
给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 ;非负整数fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解释: 能够达到的最大利润: 在此...
2020-12-17 09:02:26 74
原创 LeetCode 738 单调递增的数字
给定一个非负整数N,找出小于或等于N的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是单调递增的。)class Solution: def monotoneIncreasingDigits(self, N: int) -> int: num_list = [] while N: num_list.append(N % 1...
2020-12-15 08:49:58 110
原创 LeetCode 1680 连接连续二进制数字
给你一个整数n,请你将1到 n的二进制表示连接起来,并返回连接结果对应的 十进制数字对 109+ 7取余的结果。示例 1:输入:n = 1输出:1解释:二进制的 "1" 对应着十进制的 1 。示例 2:输入:n = 3输出:27解释:二进制下,1,2 和 3 分别对应 "1" ,"10" 和 "11" 。将它们依次连接,我们得到 "11011" ,对应着十进制的 27 。from typing import *class Solution: ...
2020-12-09 10:22:04 193
原创 LeetCode 621 任务调度器
给你一个用字符数组tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。输入:tasks = ["A","A","A","B","B","B"], .
2020-12-05 08:32:02 284
原创 LeetCode 659 分割数组为连续的子序列
给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。如果可以完成上述分割,则返回 true ;否则,返回 false 。示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 33, 4, 5示例 2:输入: [1,2,3,3,4,4,5,5]输出: True解释:你可以分割出这样两个连续子序列 :1, 2, 3...
2020-12-04 09:21:01 169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人