【leetcode】977. 有序数组的平方--双指针

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> result(nums.size());
        int k=nums.size()-1;
        for(int i=0,j=k;i<=j;)//i++与j--的操作不能放在这里,i<=j有等于
        {
            if(nums[i]*nums[i]>nums[j]*nums[j]){
                result[k]=nums[i]*nums[i];
                k--;
                i++;
            }
            else{
                result[k]=nums[j]*nums[j];
                k--;
                j--;
            }
        }
        return result; 
    }
};

两个指针一个在头一个在尾,因为对于一个有序数组,即使它有复数,那么最大值也只能是两端的元素。所以从两头向中间遍历,比较。时间复杂度O(n)。注意i++与j--的操作不能放在for()中,做++与--是有条件的。注意for中判断条件要i<=j,这样不会漏掉i=j时的元素。

猜你喜欢

转载自blog.csdn.net/Lccca/article/details/129170677