2022-05-02:给定一个数组arr,一个正数num,一个正数k, 可以把arr中的某些数字拿出来组成一组,要求该组中的最大值减去最小值<=num, 且该组数字的个数一定要正好等于k, 每个数字只
2022-05-02:给定一个数组arr,一个正数num,一个正数k,
可以把arr中的某些数字拿出来组成一组,要求该组中的最大值减去最小值<=num,
且该组数字的个数一定要正好等于k,
每个数字只能选择进某一组,不能进多个组。
返回arr中最多有多少组。
来自微软。
答案2022-05-02:
排序+动态规划。滑动窗口有陷阱,不一定行,可能可以。
第一种情况,包含i,dp[i]跟dp[i-k]相关。
第二种情况,不包含i,dp[i]=dp[i-1]。
时间复杂度O(N * logN)。
代码用rust编写。代码如下:
fn main() {
let mut arr: Vec<isize> = vec![1, 2, 3, 3, 3, 10, 10, 10, 100, 100, 100];
let ans = max_teams2(&mut arr, 3, 3);
println!("ans = {}", ans);
}
// 时间复杂度O(N * logN)
fn max_teams2(arr: &mut Vec<isize>, num: isize, k: isize) -> isize {
let n: isize = arr.len() as isize;
if k > n {
return 0;
}
arr.sort_unstable();
let mut dp: Vec<isize> = vec![];
for _ in 0..n {
dp.push(0);
}
dp[(k - 1) as usize] = if arr[(k - 1) as usize] - arr[0] <= num {
1
} else {
0
};
for i in k..n {
let p1 = dp[(i - 1) as usize];
let p2 = if arr[i as usize] - arr[(i - k + 1) as usize] <= num {
1
} else {
0
} + dp[(i - k) as usize];
dp[i as usize] = get_max(p1, p2);
}
return dp[(n - 1) as usize];
}
fn get_max(a: isize, b: isize) -> isize {
if a > b {
a
} else {
b
}
}
执行结果如下:

2022-05-02:给定一个数组arr,一个正数num,一个正数k, 可以把arr中的某些数字拿出来组成一组,要求该组中的最大值减去最小值<=num, 且该组数字的个数一定要正好等于k, 每个数字只的更多相关文章
- Codeforces Round #283 (Div. 2) A. Minimum Difficulty【一个数组定义困难值是两个相邻元素之间差的最大值。 给一个数组,可以去掉任意一个元素,问剩余数列的困难值的最小值是多少】
A. Minimum Difficulty time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- js怎么把一个数组里面的值作为一个属性添加到另一数组包含的对象里(小程序)
上面这个需求我说的似乎不太明白,之前也是没有碰到过,也是最近在搞小程序,涉及到小程序前后台数据交互,展示的部分!!不太明白没关系等会我给大家举个例子,就明白了说起来有点拗口,一看就明白了,其实如果是原 ...
- C++为什么不可以把一个数组直接赋值给另一个数组
今天好奇一个问题, int a[3] = {1,2,3]; int b[3]; b=a; 编译器报错, 网上找了一圈, 大概明白: C++就是如此设定的, 数组不能直接赋值, 可以使用std::cop ...
- OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法
<span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutable ...
- Java如何声明一个数组?JS如何声明一个数组?如何获取数组长度
1 Long[] numbers; //一般使用的定义方式,可分为静态和动态两种定义方式,下有说明. 2 Long numbers[]; //跟上面用法一致. 3 Long... numbers; / ...
- leetcode1:在数组中找2个数的和正好等于一个给定值--哈希
package java_net_test; import java.util.HashMap; import java.util.Iterator; import java.util.Map; pu ...
- unity创建一个数组,让他随机生成一个东西之C#语言(有图教程)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...
- 进程有一个全局变量i,还有有两个线程。i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?
转自https://blog.csdn.net/biubiu741/article/details/77990592 i++不是原子操作,也就是说,它不是单独一条指令,而是3条指令: 1.从内存中把i ...
- 算法进阶面试题02——BFPRT算法、找出最大/小的K个数、双向队列、生成窗口最大值数组、最大值减最小值小于或等于num的子数组数量、介绍单调栈结构(找出临近的最大数)
第二课主要介绍第一课余下的BFPRT算法和第二课部分内容 1.BFPRT算法详解与应用 找到第K小或者第K大的数. 普通做法:先通过堆排序然后取,是n*logn的代价. // O(N*logK) pu ...
- localStorage中一个数组嵌套一个数组的怪相
localStorage中一个数组嵌套一个数组的怪相 需求:向本地存储中循环添加对象 思路 : 先完成点击事件中添加本地存储功能,当刷新时使用一个数组记录已经存储下来的数据,并在点击事件中将新生成 ...
随机推荐
- Python项目案例开发从入门到实战-1.4Python图形界面设计
Python提供了多个图形开发界面的库,常用的Python GUI库如下. -Tkinter:Python内置模块 -wxPython -Jython 1.4.1创建Windows窗口 import ...
- 看图就会-网络攻击 (xss和csrf)
最近发现好多东西整理过后就没啥印象,但是思维导图很好用,能取其精华去其糟粕
- linux 查看进程的启动开始时间
先使用命令查看需要查看的进程 ps -ef | grep java root 29861 13755 2 09:42 pts/0 00:10:48 java -jar XXXX.jar ps axo ...
- AttributeError: module 'torch._six' has no attribute 'PY3'
修改:进到torch._six源码,看看里面是PY的哪个对象,修改成这对象名试试 _six.py 即将PY3修改为PY37
- 翟佳:StreamNative 组织构建之路丨声网开发者创业讲堂 • 第 5 期
前言 翟佳,StreamNative 联合创始⼈,Apache Pulsar PMC 成员与 Committer.之前任职于 EMC,担任统⼀存储部⻔技术负责⼈. 在声网开发者创业讲堂 • 第 5 期 ...
- java 环境变量配置详细教程(2023 年全网最详细)
前言: 在上一篇文章中,壹哥给大家重点讲解了 Java 实现跨平台的原理,不知道你现在有没有弄清楚呢?如果你还有疑问,可以在评论区留言- 之前的三篇文章,主要是理论性的内容,其实你暂时跳过不看也是可以 ...
- 【Jenkins系列】-Pipeline语法全集
Jenkins为您提供了两种开发管道代码的方式:脚本式和声明式. 脚本式流水线(也称为"传统"流水线)基于Groovy作为其特定于域的语言. 而声明式流水线提供了简化且更友好的语法 ...
- 各类电商平台批量获取商品信息 API 详细操作说明
前言获取商品信息可以更加快捷的查看商品的详请参数,同理批量获取商品信息的话就可以查看多个商品的信息参数,便于我们查看整个店铺的数据情况方便运营管理.具体操作如下:先获取一个key和secret,登入测 ...
- Python 人工智能 5秒钟偷走你的声音
介绍 Python 深度学习AI - 声音克隆.声音模仿,是一个三阶段的深度学习框架,允许从几秒钟的音频中创建语音的数字表示,并用它来调节文本到语音模型,该模型经过培训,可以概括到新的声音. 环境准备 ...
- Flask+Gunicorn+Nginx配置多个app
请自行安装好nginx.gunicorn和flask的运行环境,这里不再赘述 Nginx配置 修改nginx的配置 vi /etc/nginx/sites-available/default //de ...