leetcode 977.有序数组的平方
题目链接:
要求:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
解答:
这个题目暴力解法比较简单,就是先平方,后排序,时间复杂度取决于排序的方法的时间复杂度,这个暴力破解就不展示代码了。
如果使用双指针呢?这个双指针有点动态规划的感觉,就是每次比较两端,必然能得到一个最大值,最大值的一端移动一位,左端大右移,右端大左移,这样当两个指针相交,元素就遍历了一遍,就可以得到结果,这个需要额外的一个空间消耗。代码如下:
/**
 * 最简单的方法就是暴力,全部平方之后,然后重新排序
 * 双指针的方法进行交换,这个应该如何思考呢?就是从两端考虑,必然能取到最大值
 *
 * @param nums 数组
 * @return 平方后的数组
 */
public static int[] sortedSquares(int[] nums) {
    int[] result = new int[nums.length];
    int resultIndex = nums.length - 1;
    int left = 0, right = nums.length - 1;
    while (left <= right) {
        if (nums[left] * nums[left] <= nums[right] * nums[right]) {
            result[resultIndex --] = nums[right] * nums[right];
            right --;
        } else {
            result[resultIndex --] = nums[left] * nums[left];
            left ++;
        }
    }
    return result;
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号