今天在做 leetcode 的每日一题( 1636. 按照频率将数组升序排序) java 题解有这么一部分
class Solution { public int[] frequencySort(int[] nums) { Map<Integer, Integer> cnt = new HashMap<Integer, Integer>(); for (int num : nums) { cnt.put(num, cnt.getOrDefault(num, 0) + 1); } List<Integer> list = new ArrayList<Integer>(); for (int num : nums) { list.add(num); } Collections.sort(list, (a, b) -> { int cnt1 = cnt.get(a), cnt2 = cnt.get(b); return cnt1 != cnt2 ? cnt1 - cnt2 : b - a; }); int length = nums.length; for (int i = 0; i < length; i++) { nums[i] = list.get(i); } return nums; } } 作者:LeetCode-Solution 链接: https://leetcode.cn/problems/sort-array-by-increasing-frequency/solution/an-zhao-pin-lu-jiang-shu-zu-sheng-xu-pai-z2db/ 来源:力扣( LeetCode ) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 我自己用
Collections.sort(list, (a, b) -> { int cnt1 = cnt.get(a), cnt2 = cnt.get(b); return cnt1 != cnt2 ? -1 : 1; }); 代替,结果错了,请问为什么,我只知道 1 ,-1 判断正序还是逆序,不清楚相减怎么判断逆序还是正序
