1. 程式人生 > 其它 >04.Java物件和類

04.Java物件和類

有序陣列的平方

977. 有序陣列的平方

給你一個按 非遞減順序 排序的整數陣列 nums,返回 每個數字的平方 組成的新陣列,要求也按 非遞減順序 排序。

方法1:暴力排序

每個數平方之後,排個序

  • 複雜度:
    • 時間複雜度O(n + nlogn)

方法2: 雙指標法

  • 思路
    • 左右兩個指標,對比平方數的大小,將更大的數的平方填入結果陣列
    • 繼續對比,迴圈填入結果
  • 複雜度:
    • 時間複雜度O(N),每個元素在滑動窗後進來操作一次,出去操作一次,每個元素都是被被操作兩次,所以時間複雜度是 2 × n 也就是O(n)
    • 空間複雜度O(1),結果陣列
class Solution {
    public int[] sortedSquares(int[] nums) {
        //雙指標,左右平方對比,按順序排列進陣列
        int n = nums.length;
        int left = 0, right = n - 1, i = n - 1;
        int[] result = new int[n];//建立放置排序結果的陣列
        while (left <= right) {
            if (nums[left] * nums[left] < nums[right] * nums[right]) {
                result[i] = nums[right] * nums[right];
                right--;//右指標向左
                i--;
            } else {
                result[i] = nums[left] * nums[left];
                left++;//左指標向右
                i--;
            }
        }
        return result;
    }
}