2022-05-20:给定一个正数数组arr,长度为N,依次代表N个任务的难度,给定一个正数k,
你只能从0任务开始,依次处理到N-1号任务结束,就是一定要从左往右处理任务,
只不过,难度差距绝对值不超过k的任务,可以在一天之内都完成。
返回完成所有任务的最少天数。
来自微软。

答案2022-05-20:

动态规划+窗口内最大值最小值更新结构。

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

fn main() {
let arr: Vec<i32> = vec![1, 2, 3, 4, 5, 6, 7];
let ans = min_days2(&arr, 5);
println!("ans = {}", ans);
} fn min_days2(arr: &Vec<i32>, k: i32) -> i32 {
let n = arr.len() as i32;
let mut dp: Vec<i32> = vec![];
let mut window_max: Vec<i32> = vec![];
let mut window_min: Vec<i32> = vec![];
for _i in 0..n {
dp.push(0);
window_max.push(0);
window_min.push(0);
}
let mut max_l: i32 = 0;
let mut max_r: i32 = 0;
let mut min_l: i32 = 0;
let mut min_r: i32 = 0;
let mut l: i32 = 0;
for i in 0..n {
while max_l < max_r && arr[window_max[(max_r - 1) as usize] as usize] <= arr[i as usize] {
max_r -= 1;
}
window_max[max_r as usize] = i;
max_r += 1;
while min_l < min_r && arr[window_min[(min_r - 1) as usize] as usize] >= arr[i as usize] {
min_r -= 1;
}
window_min[min_r as usize] = i;
min_r += 1;
while arr[window_max[max_l as usize] as usize] - arr[window_min[min_l as usize] as usize]
> k
{
if window_max[max_l as usize] == l {
max_l += 1;
}
if window_min[min_l as usize] == l {
min_l += 1;
}
l += 1;
}
dp[i as usize] = 1 + if l - 1 >= 0 { dp[(l - 1) as usize] } else { 0 };
}
return dp[(n - 1) as usize];
}

执行结果如下:


左神java代码

2022-05-20:给定一个正数数组arr,长度为N,依次代表N个任务的难度,给定一个正数k, 你只能从0任务开始,依次处理到N-1号任务结束,就是一定要从左往右处理任务, 只不过,难度差距绝对值不的更多相关文章

  1. 【编程题目】一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值★★ (自己没有做出来!!)

    45.雅虎(运算.矩阵): 2.一个整数数组,长度为 n,将其分为 m 份,使各份的和相等,求 m 的最大值 比如{3,2,4,3,6} 可以分成 {3,2,4,3,6} m=1; {3,6}{2,4 ...

  2. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复

    产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复 用一个ArrayList存储1到100然后随机产生0到arraylist.size()之间的数字作为下标然后从arrayli ...

  3. Java实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

    public static void main(String[] args){ //创建一个int数组,长度为100, int n = 100; int[] arrayInt = new int[n] ...

  4. 给定一个无序数组arr,求出需要排序的最短子数组长度。例如: arr = [1,5,3,4,2,6,7] 返回4,因为只有[5,3,4,2]需要排序。

    思路 首先从左往右遍历,然后设定一个Max,如果遍历的过程中array[i]大于Max,则置换Max,若小于Max,则指定 k 记录该位置. 然后再从右往左遍历,设定一个Min,在遍历的过程中arra ...

  5. 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)

    网上找到一种更好的实现方式: (1)把N个数放到容器A(int数组)中. (2)从N个数中随机取出1个数放入容器B(int数组)中. (3)把容器A中最后一个数与随机抽取的数对调 或者 把容器A中最后 ...

  6. 产生一个int数组,长度为100,并向其中随机插入1-100,不重复

    #define RANDOM(X) (rand() % X + 1) int main() { //标志数组 ] = {}; ] = {}; //默认的随机数种子是1,这样的话,每次执行这个程序都会得 ...

  7. 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值。

    比如{3,2,4,3,6} 可以分成 {3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2,4}{6} m=3 所以m的最大值为3. bool isShare(int* ...

  8. Two Sum:给出一个整数数组,返回两个数的下标值,令其和等于一个指定的目标值 #Leetcode

    // Given nums = [2, 7, 11, 15], target = 9, // Because nums[0] + nums[1] = 2 + 7 = 9, // return [0, ...

  9. 在O(N)时间内求解 正数数组中 两个数相加的 最大值

    一,问题描述 给定一个正数数组arr(即数组元素全是正数),找出该数组中,两个元素相加的最大值,其中被加数的下标大于加数的下标.由加法运算的可逆性,j >i 这个条件可以去掉. 即求出: max ...

  10. php foreach 语法的遍历来源数组如果不是一个有效数组php会出现错误警告 Invalid argument supplied for foreach()

    在php中,foreach语法的遍历来源数组如果不是一个有效数组,php会出现错误警告 Invalid argument supplied for foreach() ,但是很多时候这个数组是取自某些 ...

随机推荐

  1. mysql5.7主从搭建过程

    1.下载程序包 mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz ,解压至/opt/app/mysql2.配置/etc/my.cnf[mysql]socket=/o ...

  2. DRF_视图类

    drf 视图组件 视图基类 基于APIView写五个接口 基于GenericAPIView写5个接口 5个视图扩展类 9个视图子类 视图集 两个视图基类 视图的两个基类分别是 ​ APIView : ...

  3. Pod概述

    Pod的类型 Pod的类型有如下两个: 自主式Pod:自主式Pod的含义简白来说就是不是被控制器管理的Pod,另一种就是被控制管理的Pod,不被控制器管理的Pod你会发现,它一旦死亡的话,就没有人把它 ...

  4. vulnhub靶场之HACKSUDO: SEARCH

    准备: 攻击机:虚拟机kali.本机win10. 靶机:hacksudo: search,下载地址:https://download.vulnhub.com/hacksudo/hacksudo-sea ...

  5. Linux & 标准C语言学习 <DAY1>

    Linux系统简单介绍:     BCPL->New B->C->UNIX->Minix->Linux->gcc     美国贝尔实验室 1968     Linu ...

  6. JVM内存结构与内存模型

    这篇文章重点讲一下jvm的内存结构和内存模型的知识点.(2023.3.11) 1.内存结构 jvm内存区域主要分为线程私有区域[程序计数器,虚拟机栈,本地方法栈],线程共享区域[堆,方法区],直接内存 ...

  7. Perceptron, Support Vector Machine and Dual Optimization Problem (1)

    Linear Decision Boundary(线性决策边界) Example. (classification problem) 给定一个二元的特征空间 \(\mathcal{X} = \left ...

  8. innerHTML和outerHTML区别

     1.innerHTML <body> <p>你好</p> <div id="test"><h5>就是喜欢你</h ...

  9. Vim基本使用方法来啦

    一.Vim是什么 Vim是一个高度可配置的文本编辑器,用于创建和更改任何类型的文本非常高效.与大多数UNIX系统和Apple OS X一起,它被包含为"vi".Vim是稳定的,并且 ...

  10. 使用frp进行内网穿透

    frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. frp is a ...