我的代码如下所示:
public class Solution {
public void nextPermutation(int[] nums) {
int k = 0;
for(int i = nums.length -1; i> 0 ;i--){
if(nums[i-1] < nums[i]){
k = i-1;
break;
}
}
if( k == 0) {Arrays.sort(nums); return;}
int tmp = nums[k];
nums[k] = nums[nums.length - 1];
nums[nums.length-1] = tmp;
Arrays.sort(nums,k+1,nums.length,new Comparator<Integer>(){
public int compare(Integer a, Integer b){
return b - a;
}
});
}
}
我想通过使用比较器按递减顺序对数组进行排序,但它始终显示
第14行:错误:找不到合适的sort方法(int [],int,int, 匿名比较者)
有谁可以指出问题出在哪里?非常感谢!
答案 0 :(得分:1)
您的数组类型为int
,而比较器泛型类型为Integer
。将您的数组类型更改为Integer,一切都会正常,如下所示:
public void nextPermutation(Integer[] nums) {...
答案 1 :(得分:1)
没有方法采用像int[] nums
这样的原语数组,并按降序对其进行排序。有一些采用对象数组,如sort(T[] a, Comparator<? super T> c)
- 但原语不是Objects
1 。
最简单的方法可能只是按升序排列sort(int[] input)
数组,然后reverse得到的数组。排序可能需要比反向更长的时间,因此这种方法应该表现良好。或者,您可以修改使用代码,使其以升序处理数组,或者可以将数组包装在List
中,然后使用反转视图。
1 原则上,您可以将int[]
转换为Integer[]
,通过装箱每个基础int
元素,但您需要付出很大的代价惩罚和巨大的记忆(增加大约10倍使用的内存)和垃圾惩罚这样做。
答案 2 :(得分:0)
您的nums
数组必须是Integer
类型。
答案 3 :(得分:0)
Arrays.sort
的{{1}}重载只能用于对象数组; Comparator
不是泛型类型参数的有效替换。
所以,
int
对于你想要工作的东西,必须有一个声明采用Integer[] intObjs = ...;
int[] intPrimitives = ...;
Arrays.sort(intObjs, start, end, someComparator); //OK
Arrays.sort(intPrimitives, start, end, someComparator); //fails
的Arrays.sort重载 - 但这是一个代价高昂的类型,因为它基本上需要装箱{{ 1}} s用于每次比较。