2022-04-17:给定一个数组arr,其中的值有可能正、负、0, 给定一个正数k。 返回累加和>=k的所有子数组中,最短的子数组长度。 来自字节跳动。力扣862。
2022-04-17:给定一个数组arr,其中的值有可能正、负、0,
给定一个正数k。
返回累加和>=k的所有子数组中,最短的子数组长度。
来自字节跳动。力扣862。
答案2022-04-17:
看到子数组,联想到结尾怎么样,开头怎么样。
预处理前缀和,单调栈。
达标的前缀和,哪一个离k最近?
单调栈+二分。复杂度是O(N*logN)。
双端队列。
时间复杂度:O(N)。
代码用rust编写。代码如下:
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
}
}
执行结果如下:

2022-04-17:给定一个数组arr,其中的值有可能正、负、0, 给定一个正数k。 返回累加和>=k的所有子数组中,最短的子数组长度。 来自字节跳动。力扣862。的更多相关文章
- 给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
分析,是一个dp的题目, 设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么 f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]} ...
- 给定一个无序数组arr,求出需要排序的最短子数组长度。例如: arr = [1,5,3,4,2,6,7] 返回4,因为只有[5,3,4,2]需要排序。
思路 首先从左往右遍历,然后设定一个Max,如果遍历的过程中array[i]大于Max,则置换Max,若小于Max,则指定 k 记录该位置. 然后再从右往左遍历,设定一个Min,在遍历的过程中arra ...
- 力扣1438. 绝对差不超过限制的最长连续子数组-C语言实现-中等难度
题目 传送门 文本 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit . 如果不存在满足条 ...
- 【力扣leetcode】-787. K站中转内最便宜的航班
题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...
- 不等"金九银十",金风八月,我早已拿下字节跳动的offer
字节跳动,我是在网上投的简历,之前也投过一次,简历都没通过删选,后来让师姐帮我改了一下简历,重新投另一个部门,获得了面试机会.7月23日,中午HR打电话过来预约了下午4点半面试,说会在线写代码,让我准 ...
- 5年Android程序员面试字节跳动两轮后被完虐,请查收给你的面试指南
大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助. 最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了- 所以 ...
- 被字节跳动、小米、美团面试官问的AndroidFramework难倒了? 这里有23道面试真题,助力成为offer收割机!
目录 1.Android中多进程通信的方式有哪些?a.进程通信你用过哪些?原理是什么?(字节跳动.小米)2.描述下Binder机制原理?(东方头条)3.Binder线程池的工作过程是什么样?(东方头条 ...
- 字节跳动基于Apache Hudi构建EB级数据湖实践
来自字节跳动的管梓越同学一篇关于Apache Hudi在字节跳动推荐系统中EB级数据量实践的分享. 接下来将分为场景需求.设计选型.功能支持.性能调优.未来展望五部分介绍Hudi在字节跳动推荐系统中的 ...
- 【Warrior刷题笔记】力扣169. 多数元素 【排序 || 哈希 || 随机算法 || 摩尔投票法】详细注释 不断优化 极致压榨
题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element/ 注意,该题在LC中被标注为easy,所以我们更多应该关 ...
- 力扣—gray code (格雷编码) python实现
题目描述: 中文: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 英文: Th ...
随机推荐
- mysql 排序ROW_NUMBER() RANK() DENSE_RANK()
with 月业绩 as (SELECT 年份,月份, ROUND(sum(总业绩)/100000) 业绩 FROM `myj` group by 年份,月份) select * ,ROW_NUMBER ...
- IP rDNS(PTR)信息从理解到情报挖掘
什么是IP的rdns信息? 过去很多人,将IP的rDNS信息理解为解析到IP的反查域名信息.IP的rDNS信息和IP反查域名信息完全是两个不同的信息.IP的rdns信息被称之为反向DNS解析(rDNS ...
- ABAC框架-casbin
参考文档:https://www.kancloud.cn/oldlei/casbin/1289455 参考博客:https://www.cnblogs.com/studyzy/p/11380736.h ...
- GPT-4 来了!这些开源的 GPT 应用又要变强了
近日,在 GPT-3.5 发布的半年后,OpenAI 正式推出了大版本的 GPT-4,不同于 GPT-3 到 GPT-3.5 耗时两年,这次版本升级只用了半年.如果你对 OpenAI 不熟悉,答应我读 ...
- 基于.Net开发的、支持多平台、多语言餐厅点餐系统
今天给大家推荐一套支持多平台.多语言版本的订单系统,适合餐厅.酒店等场景. 项目简介 这是基于.Net Framework开发的,支持手机.平板.PC等平台.多语言版本开源的点餐系统,非常适合餐厅.便 ...
- 集成Health Kit时因证书问题出现错误码50063的解决方案
一.问题描述及操作 应用集成Health Kit SDK后,在华为手机上进行登录授权时,返回错误码50063. 1.查看相关错误码.'50063'在Health Kit错误码中的描述是"安装 ...
- OPP前三次作业总结
OPP前三次作业总结 目录 前言: 第一次OOP训练: 7-7 有重复的数据 设计与分析: 具体代码 踩坑心得 改进建议 7-8 从一个字符串中移除包含在另一个字符串中的字符 设计与分析: 具体代码 ...
- 源码解读之FutureTask如何实现最大等待时间
预备知识:Java 线程挂起的常用方式有以下几种 Thread.sleep(long millis):这个方法可以让线程挂起一段时间,并释放 CPU 时间片,等待一段时间后自动恢复执行.这种方式可以用 ...
- GIT 操作大全 基于廖雪峰
命令显示从最近到最远的提交日志 git log / git log --pretty=oneline 回退到上一个版本:$ git reset --hard HEAD^ (用HEAD表示当前版 ...
- [BUUCTF]Pwn刷题记录
本部分内容长期更新,不再创建新文章影响阅读 rip 根据IDA加载入main函数声明发现s数组距离rbp的距离为F,即为15,这里的运行环境是64位,所以应当将Caller's rbp的数据填满,在这 ...