给你一个整数数组 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
487

被折叠的 条评论
为什么被折叠?



