leetcode-912. 排序數組

給你一個整數數組 nums,將該數組升序排列。(是不是感覺好簡單,但是考慮到用時和內存消耗就不是一個冒泡解決就可以的了)

提示:

  1. 1 <= nums.length <= 50000
  2. -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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章