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