滴滴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);
}
}

#滴滴##笔试题目#
全部评论
同0.18
点赞
送花
回复 分享
发布于 2021-04-10 21:41
第一题怎么做,可以发下第一题的代码吗
点赞
送花
回复 分享
发布于 2021-04-10 21:55
神州信息
校招火热招聘中
官网直投
用的是贪心算法,用两个数组分别存储准备时间与执行时间(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

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务