給你一個整數數組 nums
,將該數組升序排列。(是不是感覺好簡單,但是考慮到用時和內存消耗就不是一個冒泡解決就可以的了)
提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
代碼來自:
Sweetiee 的題解,我在上面小改了一下節約了1.9M內存消耗。
class Solution {
// 計數排序
public int[] sortArray(int[] nums) {
int max = 1, min = nums[0];
// 求出最大值和最小值
for (int num: nums) {
max = num > max ? num : max;
min = num < min ? num : min;
}
// 當最小值爲負數時,計算0的位置
int zero = 0;
if (min < 0) {
zero = 0 - min;
}
int arrayLength = zero > 0 ? max - min : (max - min)/nums.length + nums.length + zero;
int[] counter = new int[arrayLength * 2];
for (int num: nums) {
counter[num + zero]++;
}
int idx = 0;
for (int num = min; num <= max; num++) {
int cnt = counter[num + zero]++;
while (cnt-- > 0 && idx < nums.length) {
nums[idx++] = num;
}
}
return nums;
}
}
執行用時:2 ms
內存消耗:46.9 MB