Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 降低循环的时间复杂度_Java_Time Complexity - Fatal编程技术网

Java 降低循环的时间复杂度

Java 降低循环的时间复杂度,java,time-complexity,Java,Time Complexity,我试图使数组成为递增数组,如果I+1处的元素小于或等于I处的元素,则向该元素添加int n几次,直到它大于I处的元素,所以继续直到最后一个元素,并打印整个过程所需的移动。我正在使用for和while循环,它工作得很好,但在某些情况下需要花费太多时间。任何减少时间复杂性的建议,如果可能的话,你能给我一些关于它的信息吗(顺便说一句,我是新手) int-move=0; 对于(int i=0;i,我认为你应该这样做: int move=0; for(int i=0;i<list.length-1;

我试图使数组成为递增数组,如果I+1处的元素小于或等于I处的元素,则向该元素添加int n几次,直到它大于I处的元素,所以继续直到最后一个元素,并打印整个过程所需的移动。我正在使用for和while循环,它工作得很好,但在某些情况下需要花费太多时间。任何减少时间复杂性的建议,如果可能的话,你能给我一些关于它的信息吗(顺便说一句,我是新手)

int-move=0;

对于(int i=0;i,我认为你应该这样做:

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++;
  }
}
int-move=0;

对于(inti=0;i,您可以这样做,在某些情况下不需要大量(可能数百万)的和

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;
    }
}
int-move=0;

对于(int i=0),我是否考虑减法而不是while循环?给出这个错误:不兼容类型:可能的有损转换从double到INTYEAH抱歉我忘记了(int)在if子句的第一行中。并且您没有像前面提到的那样计算
move
,每次添加
n
都是一个移动。而且您的代码是不正确的:在
list[i]==list[i+1]
的情况下,行
list[i+1]+=n*toAdd
将添加0,退出if后阻止条件
(list[i+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;
    }
}