- 2022-05-20:给定一个正数数组arr,长度为N,依次代表N个任务的难度,给定一个正数k,
你只能从0任务开始,依次处理到N-1号任务结束,就是一定要从左往右处理任务,
只不过,难度差距绝对值不超过k的任务,可以在一天之内都完成。
返回完成所有任务的最少天数。
来自微软。
public int minDay(int[] arr,int k){
//预测 循环
//预测 天数是小于arr.length
//预测
//任务数量
int n = arr.length;
//新建缓存数组
int[] dp = new int[n];
//定义第一个缓存默认值为1
dp[0] =1;
//循环这n个任务
for (int i=1;i<n;i++){
//计算接下来的缓存
dp[i] = dp[i-1]+1;
//制定一个最小值
int min = arr[i];
//制定一个最大值
int max = arr[i];
//循环这个下标到原点的数据
for (int j= i-1;j>=0;j--){
//重新找出这个距离里面的最小值
min = Math.min(min,arr[j]);
//重新找出这个距离里面的最大值
max = Math.max(max,arr[j]);
//预测 任务之间的难度差都是小于k的
if (max-min<=k){
//重新定义这个缓存
dp[i] = Math.min(dp[i],1+(j-1>=0?dp[j-1]:0));
}else {
//断开
break;
}
}
}
//返回这个缓存值的最后一个
return dp[n-1];
}
- 给定一个数组arr,给定一个正数M,
如果arr[i] + arr[j]可以被M整除,并且i < j,那么(i,j)叫做一个M整除对。
返回arr中M整除对的总数量。
来自微软。
public int num(int[] arr,int m){
//数组的长度
int n = arr.length;
//定义返回值
int ans =0;
//开始循环
for (int i=0;i<n;i++){
//开始循环
for (int j= i+1;j<n;j++){
//预判
if (Math.abs(arr[i]+arr[j])%m==0){
ans++;
}
}
}
return ans;
}
标签:arr,min,int,max,每日,任务,dp 来源: https://www.cnblogs.com/xyf-study/p/16295001.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。