给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
看到这个排序题,首先一般会想到Java自带的数组排序Arrays.sort(nums)
不过如果想运行效率更高一点的话可以选用计数排序,计数排序的时间复杂度是O(n),而Arrays.sort里面的排序算法时间复杂度是O(nlogn)
第一种:内部主要是用快排
class Solution { public int[] sortArray(int[] nums) { Arrays.sort(nums); return nums; } }
第二种:计数排序
class Solution { public int[] sortArray(int[] nums) { int max = -50000, min = 50000; for (int num: nums) { max = Math.max(num, max); min = Math.min(num, min); } int[] counter = new int[max - min + 1]; for (int num: nums) { counter[num - min]++; } int idx = 0; for (int num = min; num <= max; num++) { int cnt = counter[num - min]; while (cnt-- > 0) { nums[idx++] = num; } } return nums; } }