- 首先检查列表
a是否已经按照非降序排列。如果不是,则立即返回0,因为逆序对存在。 - 如果列表已排序,方法接着计算列表中相邻元素之间的最小差值
cha。 - 最后,方法计算将两个目标值
x和y调整为列表中相邻元素的最小差值所需的最少操作次数,并返回这个操作次数。
import java.util.*;
public class 小c的逆序对挑战 {
public static int solution(int n, int x, int y, List<Integer> a) {
int length=a.size(),i,cha=Integer.MAX_VALUE,max=Math.max(x,y), count=0;
for( i=1;i<length;i++)
{
if(a.get(i)<a.get(i-1)){
return 0;
}
cha=Math.min(cha,a.get(i)-a.get(i-1));
}
//到这里已经得到相差最小的两个数的差值cha,直接用大数操作最省,无论如何都要使大数变得比目标小,所以+1
count+=cha/max+1;
return count;
}
}
-
代码逻辑:
- 使用一个for循环遍历列表,同时检查排序并计算最小差值。
- 如果在遍历过程中发现任何逆序对(即当前元素小于前一个元素),则返回0。
- 如果列表已排序,则通过比较相邻元素来找到最小差值
cha。 - 计算操作次数时,使用
cha除以x和y中的较大值max,并向上取整(通过+1实现)。