首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022-04-17:给定一个数组arr,其中的值有可能正、负、0, 给定一个正数k。 返回累加和>=k的所有子数组中,最短的子数组长度。 来自字节跳动。力扣8

2022-04-17:给定一个数组arr,其中的值有可能正、负、0, 给定一个正数k。 返回累加和>=k的所有子数组中,最短的子数组长度。 来自字节跳动。力扣8

原创
作者头像
福大大架构师每日一题
发布于 2022-04-17 15:15:20
发布于 2022-04-17 15:15:20
1.6K0
举报

2022-04-17:给定一个数组arr,其中的值有可能正、负、0,

给定一个正数k。

返回累加和>=k的所有子数组中,最短的子数组长度。

来自字节跳动。力扣862。

答案2022-04-17:

看到子数组,联想到结尾怎么样,开头怎么样。

预处理前缀和,单调栈。

达标的前缀和,哪一个离k最近?

单调栈+二分。复杂度是O(N*logN)。

双端队列。

时间复杂度:O(N)。

代码用rust编写。代码如下:

代码语言:rust
AI代码解释
复制
fn main() {
    let arr: Vec<isize> = vec![2, -1, 2];
    let K: isize = 3;
    let ret = shortest_subarray2(arr, K);
    println!("{}", ret);
}

const MAXVALUE: isize = 9223372036854775807;

fn shortest_subarray2(arr: Vec<isize>, K: isize) -> isize {
    let N = arr.len();
    let mut sum: Vec<isize> = vec![];
    for i in 0..N + 1 {
        sum.push(0);
    }
    for i in 0..N {
        sum[i + 1] = sum[i] + arr[i];
    }
    let mut ans: isize = MAXVALUE;
    let mut dq: Vec<isize> = vec![];
    for i in 0..N + 1 {
        dq.push(0);
    }
    let mut l: isize = 0;
    let mut r: isize = 0;
    for i in 0..N + 1 {
        // 头部开始,符合条件的,从头部弹出!
        while l != r && sum[i] - sum[dq[l as usize] as usize] >= K {
            ans = get_min(ans, i as isize - dq[l as usize]);
            l += 1;
        }
        // 尾部开始,前缀和比当前的前缀和大于等于的,从尾部弹出!
        while l != r && sum[dq[(r - 1) as usize] as usize] >= sum[i as usize] {
            r -= 1;
        }
        dq[r as usize] = i as isize;
        r += 1;
    }
    if ans != MAXVALUE {
        ans
    } else {
        -1
    }
}

fn get_min(a: isize, b: isize) -> isize {
    if a < b {
        a
    } else {
        b
    }
}

执行结果如下:

在这里插入图片描述
在这里插入图片描述

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Leetcode 33 Search in Rotated Sorted Array 二分查找变式
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no duplica
triplebee
2018/01/12
5090
[LeetCode] 153. Find Minimum in Rotated Sorted Array
该文是关于LeetCode的一个题目,题目要求是找到旋转数组的最小值。首先介绍了旋转数组的概念,然后给出了一种求解方法,即使用二分查找。在文章中,还给出了具体的示例代码以及运行结果。
用户1148830
2018/01/03
6120
Leetcode 81 Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this affect
triplebee
2018/01/12
6470
LeetCode 33-Search in Rotated Sorted Array
看到这个题目,头脑中第一个蹦出来的就是找到rotated的元素,然后两边分别做binary search就可以了。
Dylan Liu
2019/07/01
3640
leetcode: 33. Search in Rotated Sorted Array
leetcode: 81. Search in Rotated Sorted Array II
JNingWei
2018/09/28
3930
每天一道leetcode-81
目前准备每天刷一道题leetcode的题目,以此来激励那些零基础入门的人,千万不要被什么科班和非科班的说法吓倒了,计算机这个行业只要你肯努力,没有什么逾越不了的鸿沟。
乔戈里
2019/09/17
3750
每天一道leetcode-81
Leetcode 153 Find Minimum in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 错位的有序数组,找出最小元素 二分,没有什么太值得将的 class Solution { publ
triplebee
2018/01/12
5630
leetcode: 81. Search in Rotated Sorted Array II
leetcode: 33. Search in Rotated Sorted Array
JNingWei
2018/09/27
4070
33. Search in Rotated Sorted Array
https://leetcode.com/problems/search-in-rotated-sorted-array/
翎野君
2023/05/12
1840
【每日一题】33. Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
公众号-不为谁写的歌
2020/08/11
3800
【每日一题】33. Search in Rotated Sorted Array
LeetCode <二分搜索>34.Find First and Last Position of Element in Sorted Array
Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.
大学里的混子
2018/10/30
1.2K0
​LeetCode刷题实战81:搜索旋转排序数组 II
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
4630
​LeetCode刷题实战81:搜索旋转排序数组 II
【leetcode刷题】T12-搜索旋转排序数组II
今天分享leetcode第12篇文章,也是leetcode第81题—搜索旋转排序数组II(Search in Rotated Sorted Array II),地址是:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/
木又AI帮
2019/07/18
5170
【leetcode刷题】T12-搜索旋转排序数组II
LeetCode 0033 - Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
Reck Zhang
2021/08/11
2020
LeetCode 0081 - Search in Rotated Sorted Array II
Follow up for “Search in Rotated Sorted Array”:
Reck Zhang
2021/08/11
2290
Binary Search - 33. Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
ppxai
2020/09/23
3610
二分问题-LeetCode 33、34(上下边界,二分查找)
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
算法工程师之路
2019/09/19
9800
leetcode刷题(73)——33. 搜索旋转排序数组
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
老马的编程之旅
2022/06/22
1860
leetcode刷题(73)——33. 搜索旋转排序数组
【Leetcode】81. 搜索旋转排序数组 II
( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。
Leetcode名企之路
2018/10/25
6850
重中之重的二分查找
There are two sorted arrays nums1 and nums2 of size m and n respectively.
王脸小
2020/07/28
5120
推荐阅读
相关推荐
Leetcode 33 Search in Rotated Sorted Array 二分查找变式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档