leetcode
文章平均质量分 63
Amber0130
这个作者很懒,什么都没留下…
展开
-
滑动窗口最大值
给你一个整数数组 numsnumsnums,有一个大小为 kkk 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 kkk 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6原创 2021-02-21 09:38:53 · 119 阅读 · 0 评论 -
绝对差不超过限制的最长连续子数组
给你一个整数数组 numsnumsnums ,和一个表示限制的整数 limitlimitlimit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limitlimitlimit 。如果不存在满足条件的子数组,则返回 000 。示例 1:输入:nums = [8,2,4,7], limit = 4输出:2 解释:所有子数组如下:[8] 最大绝对差 |8-8| = 0 <= 4.[8,2] 最大绝对差 |8-2| = 6 > 4. [8,2,4]原创 2021-02-21 08:32:27 · 262 阅读 · 0 评论 -
数组的度
给定一个非空且只包含非负数的整数数组 numsnumsnums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在 numsnumsnums 中找到与 numsnumsnums 拥有相同大小的度的最短连续子数组,返回其长度。示例 1:输入:[1, 2, 2, 3, 1]输出:2解释:输入数组的度是2,因为元素1和2的出现频数最大,均为2.连续子数组里面拥有相同度的有如下所示:[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2原创 2021-02-20 08:51:36 · 138 阅读 · 0 评论 -
最大连续1的个数 III
给定一个由若干 000 和 111 组成的数组 AAA,我们最多可以将 KKK 个值从 000 变成 111 。返回仅包含 111 的最长(连续)子数组的长度。示例 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解释原创 2021-02-19 09:46:03 · 110 阅读 · 0 评论 -
K 连续位的最小翻转次数
在仅包含 000 和 111 的数组 AAA 中,一次 KKK 位翻转包括选择一个长度为 KKK 的(连续)子数组,同时将子数组中的每个 000 更改为 111,而每个 111更改为 000。返回所需的 KKK 位翻转的最小次数,以便数组没有值为 000 的元素。如果不可能,返回 −1-1−1。示例 1:输入:A = [0,1,0], K = 1输出:2解释:先翻转 A[0],然后翻转 A[2]。示例 2:输入:A = [1,1,0], K = 2输出:-1解释:无论我们怎样翻转大小为原创 2021-02-18 11:32:49 · 292 阅读 · 1 评论 -
杨辉三角 II
给定一个非负索引 kkk,其中 k≤33k ≤ 33k≤33,返回杨辉三角的第 kkk 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 3输出: [1,3,3,1]进阶:你可以优化你的算法到 O(k)O(k)O(k) 空间复杂度吗?Cnm=Cnm−1×n−m+1mC_n^{m}=C_n^{m-1}\times\dfrac{n-m+1}{m}Cnm=Cnm−1×mn−m+1typedef long long ll;class Solution {public:原创 2021-02-12 09:59:00 · 89 阅读 · 1 评论 -
K 个不同整数的子数组
给定一个正整数数组 AAA,如果 AAA 的某个子数组中不同整数的个数恰好为 KKK,则称 AAA 的这个连续、不一定不同的子数组为好子数组。(例如,[1,2,3,1,2][1,2,3,1,2][1,2,3,1,2] 中有 333 个不同的整数:1,21,21,2,以及 333。)返回 AAA 中好子数组的数目。示例 1:输入:A = [1,2,1,2,3], K = 2输出:7解释:恰好由 222 个不同整数组成的子数组:[1,2],[2,1],[1,2],[2,3],[1,2,1],[2,1原创 2021-02-10 14:21:27 · 195 阅读 · 0 评论 -
最长湍流子数组
当 AAA 的子数组 A[i],A[i+1],...,A[j]A[i], A[i+1], ..., A[j]A[i],A[i+1],...,A[j] 满足下列条件时,我们称其为湍流子数组:若 i<=k<ji <= k < ji<=k<j,当 kkk 为奇数时, A[k]>A[k+1]A[k] > A[k+1]A[k]>A[k+1],且当 kkk 为偶数时,A[k]<A[k+1]A[k] < A[k+1]A[k]<A[k+1];或 若原创 2021-02-08 08:22:59 · 114 阅读 · 0 评论 -
非递减数列
给你一个长度为 nnn 的整数数组,请你判断在 最多 改变 111 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i(0<=i<=n−2)i (0 <= i <= n-2)i(0<=i<=n−2),总满足 nums[i]<=nums[i+1]nums[i] <= nums[i + 1]nums[i]<=nums[i+1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你原创 2021-02-07 13:16:30 · 328 阅读 · 0 评论 -
可获得的最大点数
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPointscardPointscardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 kkk 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPointscardPointscardPoints 和整数 kkk,请你返回可以获得的最大点数。示例 1:输入:cardPoints = [1,2,3,4,5,6,1], k = 3输出:12解释:第一次行动,不管原创 2021-02-06 08:53:34 · 218 阅读 · 0 评论 -
尽可能使字符串相等
给你两个长度相同的字符串,sss 和 ttt。将 sss 中的第 iii 个字符变到 ttt 中的第 iii 个字符需要 ∣s[i]−t[i]∣|s[i] - t[i]|∣s[i]−t[i]∣ 的开销(开销可能为 000),也就是两个字符的 ASCIIASCIIASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCostmaxCostmaxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 sss 的子字符串转化为它在 ttt 中对应的子原创 2021-02-05 10:16:52 · 171 阅读 · 0 评论 -
旋转数组
给定一个数组,将数组中的元素向右移动 kkk 个位置,其中 kkk 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1)O(1)O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3原创 2021-02-04 17:26:54 · 57 阅读 · 0 评论 -
滑动窗口中位数
中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。例如:-[2,3,4][2,3,4][2,3,4],中位数是 333[2,3][2,3][2,3],中位数是 (2+3)/2=2.5(2 + 3) / 2 = 2.5(2+3)/2=2.5给你一个数组 numsnumsnums,有一个大小为 kkk 的窗口从最左端滑动到最右端。窗口中有 kkk 个数,每次窗口向右移动 111 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并原创 2021-02-03 11:06:56 · 1641 阅读 · 0 评论 -
替换后的最长重复字符
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 kkk 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 kkk 不会超过 10410^4104。示例 1:输入:s = "ABAB", k = 2输出:4解释:用两个'A'替换为两个'B',反之亦然。示例 2:输入:s = "AABABBA", k = 1输出:4解释:将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。子串 "BBBB" 有最长重复原创 2021-02-02 09:30:58 · 274 阅读 · 0 评论 -
相似字符串组
如果交换字符串 XXX 中的两个不同位置的字母,使得它和字符串 YYY 相等,那么称 XXX 和 YYY 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,"tars" 和 "rats" 是相似的 (交换 000 与 222 的位置); "rats" 和 "arts" 也是相似的,但是 "star" 不与 "tars","rats",或 "arts" 相似。总之,它们通过相似性形成了两个关联组:{"tars", "rats", "arts"} 和 {“star”}。注意,"tars"原创 2021-01-31 09:06:54 · 314 阅读 · 0 评论 -
水位上升的泳池中游泳
在一个 N×NN \times NN×N 的坐标方格 gridgridgrid 中,每一个方格的值 grid[i][j]grid[i][j]grid[i][j] 表示在位置 (i,j)(i,j)(i,j) 的平台高度。现在开始下雨了。当时间为 ttt 时,此时雨水导致水池中任意位置的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认在方格内部游动是不耗时的。当然,在你游泳的时候你必须待在坐标方格里面。你从坐标方格的左原创 2021-01-30 15:40:06 · 159 阅读 · 0 评论 -
最小体力消耗路径
你准备参加一场远足活动。给你一个二维 rows×columnsrows \times columnsrows×columns 的地图 heights ,其中 heights[row][col]heights[row][col]heights[row][col]表示格子 (row,col)(row, col)(row,col) 的高度。一开始你在最左上角的格子 (0,0)(0, 0)(0,0) ,且你希望去最右下角的格子 (rows−1,columns−1)(rows-1, columns-1)(rows−1原创 2021-01-29 10:17:28 · 443 阅读 · 1 评论 -
保证图可完全遍历
AliceAliceAlice 和 BobBobBob 共有一个无向图,其中包含 nnn 个节点和 333 种类型的边:类型 1:只能由 Alice 遍历。类型 2:只能由 Bob 遍历。类型 3:Alice 和 Bob 都可以遍历。给你一个数组 edgesedgesedges ,其中 edges[i]=[typei,ui,vi]edges[i] = [type_i, u_i, v_i]edges[i]=[typei,ui,vi] 表示节点 uiu_iui 和 viv_ivi 之间存原创 2021-01-27 09:44:40 · 110 阅读 · 0 评论 -
由斜杠划分区域
在由 1×11 \times 11×1 方格组成的 N×NN \times NN×N 网格 gridgridgrid 中,每个 1×11 \times 11×1 方块由 /、\ 或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此 \ 用 “\\” 表示。)。返回区域的数目。示例 1:输入:[ " /", "/ "]输出:2解释:2x2 网格如下:示例 2:输入:[ " /", " "]输出:1解释:2x2 网格如下:示原创 2021-01-25 10:36:35 · 283 阅读 · 0 评论 -
三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24注意:给定的整型数组长度范围是[3,104][3,10^4][3,104],数组中所有的元素范围是[−1000,1000][-1000, 1000][−1000,1000]。输入的数组中任意三个数的乘积不会超出323232位有符号整数的范围。class Solution {public: int maximumProdu原创 2021-01-20 10:05:58 · 220 阅读 · 0 评论 -
打砖块
有一个 m×nm \times nm×n 的二元网格,其中 111 表示砖块,000 表示空白。砖块 稳定(不会掉落)的前提是:一块砖直接连接到网格的顶部,或者至少有一块相邻(444 个方向之一)砖块 稳定 不会掉落时给你一个数组 hitshitshits ,这是需要依次消除砖块的位置。每当消除 hits[i]=(rowi,coli)hits[i] = (row_i, col_i)hits[i]=(rowi,coli) 位置上的砖块时,对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这一消除原创 2021-01-18 11:14:33 · 59 阅读 · 0 评论 -
账户合并
给定一个列表 accountsaccountsaccounts,每个元素 accounts[i]accounts[i]accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0]accounts[i][0]accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称原创 2021-01-18 10:16:59 · 175 阅读 · 0 评论 -
翻硬币
小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。比如,可能情形是:**oo***oooo如果同时翻转左边的两个硬币,则变为:oooo***oooo现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做一步操作。输入格式两行等长的字符串,分别表示初始状态和要达到的目标状态。输出格式一个整数,表示最小操作步数原创 2021-01-18 10:01:42 · 74 阅读 · 0 评论 -
可被 5 整除的二进制前缀
给定由若干 000 和 111 组成的数组 AAA。我们定义 NiN_iNi:从 A[0]A[0]A[0] 到 A[i]A[i]A[i] 的第 iii 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表 answeransweranswer,只有当 NiN_iNi 可以被 555 整除时,答案 answer[i]answer[i]answer[i] 为 true,否则为 false。示例 1:输入:[0,1,1]输出:[true,false,false]解释:输入数字原创 2021-01-17 18:54:59 · 212 阅读 · 0 评论 -
两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l原创 2021-01-13 18:09:19 · 72 阅读 · 0 评论 -
两数之和
给定一个整数数组 numsnumsnums 和一个整数目标值 targettargettarget,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], t原创 2021-01-13 17:57:13 · 47 阅读 · 0 评论 -
项目管理
公司共有 nnn 个项目和 mmm 个小组,每个项目要不无人接手,要不就由 mmm 个小组之一负责。group[i]group[i]group[i] 表示第iii 个项目所属的小组,如果这个项目目前无人接手,那么 group[i]group[i]group[i] 就等于−1-1−1。(项目和小组都是从零开始编号的)小组可能存在没有接手任何项目的情况。请你帮忙按要求安排这些项目的进度,并返回排序后的项目列表:同一小组的项目,排序后在列表中彼此相邻。项目之间存在一定的依赖关系,我们用一个列表 befo原创 2021-01-12 12:33:45 · 79 阅读 · 0 评论 -
交换字符串中的元素
给你一个字符串 sss,以及该字符串中的一些「索引对」数组 pairspairspairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 000 开始)。你可以 任意多次交换 在 pairspairspairs 中任意一对索引处的字符。返回在经过若干次交换后,sss 可以变成的按字典序最小的字符串。示例 1:输入:s = "dcab", pairs = [[0,3],[1,2]]输出:"bacd"解释: 交换 s[0] 和 s[3], s = "bcad"交换 s原创 2021-01-11 11:03:32 · 562 阅读 · 0 评论 -
汇总区间
给定一个无重复元素的有序整数数组 numsnumsnums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,numsnumsnums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 numsnumsnums 的数字 xxx 。列表中的每个区间范围 [a,b][a,b][a,b] 应该按如下格式输出:"a->b" ,如果 a != b"a" ,如果 a == b示例 1:输入:nums = [0,1,2,4,5,7]输出:["0->2","原创 2021-01-10 17:34:50 · 100 阅读 · 0 评论 -
买卖股票的最佳时机 III
给定一个数组,它的第 iii 个元素是一支给定的股票在第 iii 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:prices = [3,3,5,0,0,3,1,4]输出:6解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。 随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天原创 2021-01-09 20:26:43 · 170 阅读 · 0 评论 -
二叉树的前序遍历
给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3][1,null,2,3][1,null,2,3] 1 \ 2 / 3 输出: [1,2,3][1,2,3][1,2,3]MorrisMorrisMorris 遍历的核心思想是利用树的大量空闲指针,实现空间开销的极限缩减。其前序遍历规则总结如下:新建临时节点,令该节点为 rootrootroot;如果当前节点的左子节点为空,将当前节点加入答案,并遍历当前节点的右子节点;原创 2020-10-27 10:14:17 · 676 阅读 · 0 评论