我的代码如下所示:
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行:错误:未找到适合排序的方法(int[],int,int,匿名比较器)
有人能指出问题出在哪里吗?非常感谢!
您的< code>nums数组必须是< code>Integer类型。
您的数组是< code>int类型,而比较器泛型类型是< code>Integer。把你的数组类型改成整数,一切都会好的,就像这样:
< code > public void next permutation(Integer[]nums){...
没有像< code>int[] nums这样的原始数组并按降序排序的方法。有一些接受对象数组,比如< code>sort(T[] a,Comparator
最直接的方法可能是简单地按升序对数组进行排序(int[]输入)
,然后反转生成的数组。排序可能比反转花费的时间要长得多,因此此方法应该表现良好。或者,您可以修改消费代码,使其按升序处理数组,或者您可以将数组包装在List
中,然后使用反转视图。
还有很多其他选择。
1 原则上,您可以通过装箱每个底层int元素将int
[]
转换为Integraph[]
,但是您将付出巨大的性能损失和巨大的内存(增加约10倍的内存)和垃圾罚款。
问题内容: 说,我们有以下二维数组: 应该如何声明Java 类以使用降序按数组的第一个元素对数组进行排序?供参考的功能是: 问题答案: […]应该如何声明Java Comparator类以按其降序将数组的第一个元素排序 […] 这是使用Java 8的完整示例: 输出: 对于Java 7,你可以执行以下操作: 如果你不幸无法在Java 6或更早版本上运行,请执行以下操作:
问题内容: 我正在尝试根据用户输入对对象列表进行排序。如何使sort方法实现变体比较器? 例: 如何根据需要根据getKey / getModified /其他任意属性进行上述排序? 问题答案: 如果所有“键”都将链接到getter方法,则可以在函数中使用键/ getter的静态映射: 注意:我们将不得不使用原始类型,因为我们不能使用不同的类型(即使所有的获取方法都将返回对象,也会有所不同) 然后
“StringComparator”在“arrays.sort(b,new StringComparator());”出货量和预期的一样。 但当我使用默认排序(步骤如下),然后按“StringComparator”排序时,bug显示: “Arrays.Sort(a);Arrays.Sort(a,new StringComparator());”
我想学习java中的比较器,我在网上找到了这个很好的例子,我的问题是如何更改这个代码,使宠物的名字按年龄和降序排列,以便最大的是第一个,最小的是最后一个?
我一直在做拼字游戏作业。我需要从列表中读取单词,然后读取每个字符并赋值,最终为每个单词分配一个总分。已经完成了!唷。现在我需要使用比较器将单词从最高分到最低分进行排序。读了很多,还是很迷茫。我知道我可以使用接口,但也有使用lambda表达式的比较器,这是我想去的方向。我只是不知道该怎么做。我需要比较每个单词的sumValue,然后按降序打印单词。 我创建了 2 个循环来读取单词 (i),然后是字符
问题内容: 我有一个简单的类,其中包含一个字符串(名称)和一个整数(年龄)。应存储在集合中的对象不得具有双名值,并且应根据年龄的降序进行排序。第一个代码示例删除所有双精度名称,但不包含第二个排序条件: 下一个示例比较器将对其余对象集进行排序,该对象集不包含任何重复名称: 第二个比较器正确地根据对象的年龄值对它们进行排序,但是它允许使用重复名称,我不明白,因为外部if语句已经检查了两个对象的名称是否