leetcode 977.有序数组的平方

题目链接:

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;
}
posted @ 2023-12-13 22:39  庄子游世  阅读(8)  评论(0编辑  收藏  举报