[leetCode] 977. Squares of a Sorted Array


🎆 Description

Given an integer array nums sorted in non-decreasing order,
eturn an array of the squares of each number sorted in non-decreasing order.

Example 1:

Input: nums = [-4,-1,0,3,10]
Output: [0,1,9,16,100]
Explanation: After squaring, the array becomes [16,1,0,9,100].
After sorting, it becomes [0,1,9,16,100].
Example 2:

Input: nums = [-7,-3,2,3,11]
Output: [4,9,9,49,121]

🎇 Solution

var sortedSquares = function(nums) {
    let low = 0;
    let high = nums.length - 1;
    let output = [];
    
    while(low <= high) {
        if (nums[low]**2 > nums[high]**2) {
            output.push(nums[low]**2);
            low++;
        } else {
            output.push(nums[high]**2);
            high--;
        }
    }
    return output.reverse();
};

two pointers

  • 角端点からlowとhighポインタが指す値の二乗値を比較します.
  • は、より大きな値の1つを配列に挿入します.
  • より高い値で正の値になったポインタを移動します.low値が解放されると、lowポインタ++;反対も同じだ.
  • 配列要素の個数は奇数であってもよい.したがって,条件はwhile(low<=high)lowとhighが同じ場合を考慮すべきである.
  • どうして降順に腕立て伏せして反転しますか()


    基本的に並んでいるのは最後にプッシュされているからです.
    2つのポインタの値を比較することで、大数からプッシュすることで、自然に降順に並べることができます.
    ただし、小数点から押す場合は、最も近い比較の小さい値を前のインデックス、最初のインデックスに入れる必要があります.
    いいですが、他の方法を使わなければならないので、簡単に押して、最後に逆順に並べます.