【算法学习随笔(2)】双指针排序

双指针排序

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

因为原来的数组有序

数组的平方的最大值就在数组的两端,不是最左边就是最右边

这时候考虑使用双指针,left指向起始位置,right指向终止位置

如果右边的值的平方比左边值的平方大那么把右边的值放入结果的最后一位,右边指针向左移一位;相反就把左边值的平方放入结果的最后一位,把左边的指针又移动一位;知道右边指针比左边大为止

class Solution{
    public:
    vector<int>sortedSquares(vector<int>& A){
		int k = A.size()-1;
        vector<int> result(A.size(),0);
        for(int i = 0,j=A.size()-1;i<=j;){
            if(A[i]*A[i]<A[j]*A[j]){
                result[k--] = A[j]*A[j];
                j--;
            }
            else{
                result [k--] = A[i]*a[i];
                i++;
            }
        }
        return result;
    }
}
const sortedSquares = function (nums) {
   	let result = [];
    for(let i=0,j=nums.length; i <= j;){
        if(Math.abs(nums[i])<Math.abs(nums[j])){
			result.unshift(Math.pow(nums[j],2));
            j--;
        }
        else{
            result.unshift(Math.pow(nums[i],2));
            i++;
        }
    }
}
posted @ 2021-12-27 23:31  CeliaChu207  阅读(50)  评论(0编辑  收藏  举报