首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

至少为K最短数组

问题描述 返回 A 最短非空连续子数组长度,该子数组至少为 K 。 如果没有至少为 K 非空子数组,返回 -1 。...然后发现数组中存在负值,前缀不一定是递增,因此上述做法不行。 先说做法,再解释其正确性。 首先计算前缀和数组记做sum,一般会让前缀和数组多一个0元素。...此外遍历过程中会使前缀元素维持一个单调队列(从队头到队尾单调递增)结构 遍历前缀和数组,分别找到以当前元素cur为右边界时满足子数组大于等于K左边界i,即找到满足如下条件里cur最近i, sum...因此若存在i2,此时i1必不为最短数组左边界。 问题二:为何直接可以弹出满足条件队头元素,会不会以队头元素为左边界时满足条件最短数组在cur后面?...-1 : ans; } } 时间复杂度为O(N), 额外空间复杂度亦为O(N)。

47920
您找到你想要的搜索结果了吗?
是的
没有找到

【面试题】1887- 如何判断两个数组内容是否相等

题目 给定两个数组,判断两数组内容是否相等。...=> NaN值永远不相等 Array.prototype.includes() 是使用零值相等算法 => NaN值视作相等 严格相等算法: 与 === 运算符使用算法相同 零值相等不作为 JavaScript...API 公开, -00 视作相等,NaN值视作相等,具体参考mdn文档:[1] image.png 使用includes const arr1 = ["apple", "banana", NaN]...评论区大佬方案(操作第二个数组) 遍历第一个数组,在第二个数组找到就删除第二个数组中对应元素,没有找到直接不等,最后再判断一下第二个数组长度即可。...arr2.length } 注意事项 这个题需要注意: 先判断长度,长度不等 必然不等 元素可重复 边界情况考虑 '1' 1 (Objectkey是字符串, Mapkey没有限制) NaN null

19610

【面试题】1915- 如何判断两个数组内容是否相等

题目 给定两个数组,判断两数组内容是否相等。...=> NaN值永远不相等 Array.prototype.includes() 是使用零值相等算法 => NaN值视作相等 严格相等算法: 与 === 运算符使用算法相同 零值相等不作为 JavaScript...API 公开, -00 视作相等,NaN值视作相等,具体参考mdn文档:[1] image.png 使用includes const arr1 = ["apple", "banana", NaN]...评论区大佬方案(操作第二个数组) 遍历第一个数组,在第二个数组找到就删除第二个数组中对应元素,没有找到直接不等,最后再判断一下第二个数组长度即可。...arr2.length } 注意事项 这个题需要注意: 先判断长度,长度不等 必然不等 元素可重复 边界情况考虑 '1' 1 (Objectkey是字符串, Mapkey没有限制) NaN null

15410

【面试题】1887- 如何判断两个数组内容是否相等

题目 给定两个数组,判断两数组内容是否相等。...=> NaN值永远不相等 Array.prototype.includes() 是使用零值相等算法 => NaN值视作相等 严格相等算法: 与 === 运算符使用算法相同 零值相等不作为 JavaScript...API 公开, -00 视作相等,NaN值视作相等,具体参考mdn文档:[1] image.png 使用includes const arr1 = ["apple", "banana", NaN]...评论区大佬方案(操作第二个数组) 遍历第一个数组,在第二个数组找到就删除第二个数组中对应元素,没有找到直接不等,最后再判断一下第二个数组长度即可。...arr2.length } 注意事项 这个题需要注意: 先判断长度,长度不等 必然不等 元素可重复 边界情况考虑 '1' 1 (Objectkey是字符串, Mapkey没有限制) NaN null

20610

图解 LeetCode 难题:「至少为 K 最短数组

作者 | P.yh 来源 | 五分钟学算法 今天分享题目来源于 LeetCode 上第 862 号问题:至少为 K 最短数组。题目难度为 Hard 。...题目描述 返回 A 最短非空连续子数组长度,该子数组至少为 K 。 如果没有至少为 K 非空子数组,返回 -1 。...,找出一个最短数组,子数组中所有元素必须不小于 K。...刚拿到这道题时候感觉貌似很简单,用两个指针同向而行,这两个指针之间确定了一个子数组,先移动右指针,每当满足条件,我们就试着移动左指针,到条件不满足就停止,就好像一个 滑动窗口 一样,但是这个做法其实是错误...这个思路是 work ,但是对于这道题来说时间过高,报了 TLE。

3.2K21

2022-01-18:将数组分成两个数组并最小化数组差。

2022-01-18:将数组分成两个数组并最小化数组差。 给你一个长度为 2 * n 整数数组。...你需要将 nums 分成 两个 长度为 n 数组,分别求出两个数组,并 最小化 两个数组之 差绝对值 。nums 中每个元素都需要放入两个数组之一。 请你返回 最小 数组之差。...解释:最优分组方案是分成 [3,9] [7,3] 。 数组之差绝对值为 abs((3 + 9) - (7 + 3)) = 2 。 力扣2035。 答案2022-01-18: 分治法。...sum挑这些数,累加是多少! map记录结果 HashMap> map key -> 挑了几个数,比如挑了3个数,但是形成累加可能多个!...// sum挑这些数,累加是多少!

79250

2022-01-18:将数组分成两个数组并最小化数组差。 给

2022-01-18:将数组分成两个数组并最小化数组差。 给你一个长度为 2 * n 整数数组。...你需要将 nums 分成 两个 长度为 n 数组,分别求出两个数组,并 最小化 两个数组之 差绝对值 。nums 中每个元素都需要放入两个数组之一。 请你返回 最小 数组之差。...解释:最优分组方案是分成 3,9 7,3 。 数组之差绝对值为 abs((3 + 9) - (7 + 3)) = 2 。 力扣2035。 答案2022-01-18: 分治法。...sum挑这些数,累加是多少! map记录结果 HashMap> map key -> 挑了几个数,比如挑了3个数,但是形成累加可能多个!...// sum挑这些数,累加是多少!

59210

LeetCode1013:将数组分成相等三个部分

https://github.com/pzqu/LeetCode 题目 给你一个整数数组 A,只有可以将其划分为三个相等非空部分时才返回 true,否则返回 false。...,每段是连续 每段相等 总和/3就是每段 方法一:暴力破解 最直观想法就暴力破解,要把一个线段砍成三段,那必然有两条分隔线,所以有两个循环来改变分隔线位置。...每次第二段长度增加1、第三段长度减少1,都要进行一次判断是否三个相等。...如果第二段第三段各自第一段不相等,那就先将第三段总和tmpsumc - A[i+1],让第一段长度加1,第二段长度清零 但是速度很慢: ?...ps: 有人会问了,因为数组有正有负,如果我找到了更长第一段怎么办? 第二段位置总是在第一段后面的,第一段再长,都是小于第二段长度,总和我们都求出来了,只要找到第一段就好啦。

1.6K10

刷题打卡:在两个长度相等排序数组中找到上中位数

【题目】 给定两个有序数组arr1arr2,已知两个数组长度都为N,求两个数组中所有数上中位数。...要求时间复杂度O(logN),空间复杂度O(1) 【举例】 例如 arr1 = [1, 2,3,4],arr2 = [3,4,5,6]。 总共8个数,则中位数就是第 4 小数,为 3....【难度】 中 【解答】 这道题可以采用递归来解决,注意,这道题数组是有序,所以它有如下特点: (1)、当 两个数组长度为偶数时: 我来举个例子说明他拥有的特点吧。...则数组长度为 n = 4。 ? 分别选出这两个数组上中位数下标,即 mid1 = (n-1)/2 = 1。 mid2 = (n - 1)/2 = 1。 ?...(2)、当两个数组长度为奇数时: 假定 arr1 = [1, 2,3,4,5],arr2 = [3,4,5,6,7]。则数组长度为 n = 5。 mid1 = (n-1)/2 = 2。

1.1K20

数组分成两个数组并最小化数组差(状态压缩DP)

题目 给你一个长度为 2 * n 整数数组。 你需要将 nums 分成 两个 长度为 n 数组,分别求出两个数组,并 最小化 两个数组之 差绝对值 。...nums 中每个元素都需要放入两个数组之一。 请你返回 最小 数组之差。 示例 1: 输入:nums = [3,9,7,3] 输出:2 解释:最优分组方案是分成 [3,9] [7,3] 。...数组之差绝对值为 abs((-36) - (36)) = 72 。...数组之差绝对值为 abs((2 + 4 + -9) - (-1 + 0 + -2)) = 0 。...解题 数组折半,分别对一半进行状态枚举 枚举一边取个数,将左右满足二进制位个数状态取出,排序,双指针求解最接近 时间复杂度 class Solution { public:

2.3K20

通过最少操作次数使数组相等(贪心+双指针)

题目 给你两个长度可能不等整数数组 nums1 nums2 。 两个数组所有值都在 1 到 6 之间(包含 1 6)。...每次操作中,你可以选择 任意 数组任意一个整数,将它变成 1 到 6 之间 任意 值(包含 1 6)。...请你返回使 nums1 中所有数与 nums2 中所有数相等最少操作次数。 如果无法使两个数组相等,请返回 -1 。...示例 2: 输入:nums1 = [1,1,1,1,1,1,1], nums2 = [6] 输出:-1 解释:没有办法减少 nums1 或者增加 nums2 使二者相等。...示例 3: 输入:nums1 = [6,6], nums2 = [1] 输出:3 解释:你可以通过 3 次操作使 nums1 中所有数与 nums2 中所有数相等

41830

至少为 K 最短数组(难度:困难)

一、题目 给你一个整数数组 nums 一个整数 k ,找出 nums 中和至少为 k 最短非空子数组 ,并返回该子数组长度。如果不存在这样数组 ,返回 -1 。...子数组数组中 连续 一部分。...那么,对于一个数组有多少子序列,我们首先需要确定数组子序列起点。...那么,由于题目中只需要最短长度,所以,假设我们以i为起点向后拼装子序列,只要子序列总和大于等于k,则立刻结束以i为起点子序列组合行为。...我们通过遍历数组nums前缀,将某个元素i前缀放入到队列中,这样,从末尾执行插入,从队首执行弹出。 那么,其实对于哪些数为起点,也是有优化空间

13710

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券