滴滴4.10后端笔试算法第二题(java)

题目大致是这样的:
第一行输入N,X(N为数组长度,X为等差数列的公差,X大于0);第二行输入为N个正整数,代表数组元素。每次可以变化数组中的一个元素为任意正整数,问将数组变成一个以X为公差的等差数列最小的步数(数列为正整数数列)。
本地用了几个测试用例均通过,但是提交上去AC只有0.18,提示答案错误(没有超时超空间)请大佬指正:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int x=sc.nextInt();
int[] trees=new int[n];
for(int i=0;i<n;i++){
trees[i]=sc.nextInt();
}
sc.close();
int length=0;  //连续等差子列长度
int max=0;     //记录最长的长度
for(int i=1;i<n;i++){
if(trees[i]-trees[i-1]==x&&trees[i-1]>=1+(i-1)*x){       //寻找连续等差子数列,且该子序列起始点的值需满足让变化后的tree[0]>=1
length++;
max= max>length?max:length;                           //更新max
}else{                                 //不满足条件则length归零
length=0;
}
}
System.out.println(n-max-1);
}
}

#滴滴##笔试题目#
全部评论
用的是贪心算法,用两个数组分别存储准备时间与执行时间(prepare和commit) 同时用一个最小堆维护prepare的最小值(堆内存的是索引PriorityQueue<Integer> pq=new PriorityQueue<>((x,y)->prepare[x]-[prepare[y])),每次弹出准备时间最小的任务索引index(运行这个)如果prepare[index]>0,则将prepare[i]全部减去prepare[index],并将返回值time增加这个prepare[index],同样的,运行执行任务时也把prepare[i]全部减去commit[index]。直到堆为空后time加上所有的执行时间commit[i]即为结果
点赞 回复 分享
发布于 2021-04-11 10:15
第一题怎么做,可以发下第一题的代码吗
点赞 回复 分享
发布于 2021-04-10 21:55
同0.18
点赞 回复 分享
发布于 2021-04-10 21:41

相关推荐

昨天 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
06-15 18:44
黄淮学院 Java
Lynn012:如果是居民楼还是算了吧,看着有点野呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务