减少循环的时间复杂度

时间:2016-01-13 12:20:44

标签: java time-complexity

我正在尝试使数组成为一个递增的数组,如果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++;
  }
}

2 个答案:

答案 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;
    }
}