977. 有效数组的平方

双指针法

class Solution {
    public int[] sortedSquares(int[] nums) {

        /**
         * 先求出所有元素的平方,然后从两端双指针遍历
         * 两端的元素总是最大的,逆序插入新的数组
         */
        for (int i = 0; i < nums.length; i++) {
            nums[i] = nums[i] * nums[i];
        }

        int left = 0;
        int right = nums.length - 1;
        int[] arr = new int[nums.length];

        for (int i = arr.length - 1; i >= 0; i--) {

            if (nums[left] >= nums[right]){
                arr[i] = nums[left++];
            }
            else {
                arr[i] = nums[right--];
            }
        }

        return arr;
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

优化1——在求平方的同时排序

class Solution {
    public int[] sortedSquares(int[] nums) {

        /**
         * 先比较出平方的大小,然后直接记录大的数值,在一个循环中进行
         */
        int left = 0;
        int right = nums.length - 1;
        int[] arr = new int[nums.length];

        for (int i = arr.length - 1; i >= 0; i--) {

            if (nums[left] * nums[left] >= nums[right] * nums[right]){
                arr[i] = nums[left] * nums[left++];
            }
            else {
                arr[i] = nums[right] * nums[right--];
            }
        }

        return arr;
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(n)
 */

https://leetcode-cn.com/problems/squares-of-a-sorted-array/

posted @   振袖秋枫问红叶  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示