我正在尝试使数组成为一个递增的数组,如果i + 1处的元素小于或等于i处的元素,则向该元素添加一个int n几次,直到它变得超过i处的元素为止继续,直到最后一个元素和整个过程所需的打印移动。我正在使用for和while循环它工作正常,但在某些情况下需要花费太多时间。任何减少时间复杂性的建议,如果可能,你可以给我一些关于它的信息(顺便说一句,我是新手)
int move=0;
for(int i=0;i<list.length-1;i++)
{
while(list[i+1]<=list[i])
{
list[i+1]+=n;
move++;
}
}
答案 0 :(得分:1)
在我看来,你应该这样做:
int move=0;
for(int i=0;i<list.length-1;i++)
{
if(list[i+1]<=list[i])
{
int toAdd = (int) Math.ceil( (list[i]-list[i+1]) / n );
list[i+1]+= n * toAdd;
move++;
}
}
如果有效,请告诉我。
答案 1 :(得分:1)
你可以这样做,在某些情况下没有很多(可能是数百万)总和。
int move=0;
for(int i=0;i<list.length-1;i++)
{
if (list[i+1]<=list[i]) {
int steps = (int)((list[i]-list[i+1])/n) + 1;
list[i+1] += steps*n;
move += steps;
}
}