数组刷题笔记3:有序数组的平方

有序数组的平方

977. 有序数组的平方

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

方法1:暴力排序

每个数平方之后,排个序

  • 复杂度:
    • 时间复杂度O(n + nlogn)

方法2: 双指针法

  • 思路
    • 左右两个指针,对比平方数的大小,将更大的数的平方填入结果数组
    • 继续对比,循环填入结果
  • 复杂度:
    • 时间复杂度O(N),每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被被操作两次,所以时间复杂度是 2 × n 也就是O(n)
    • 空间复杂度O(1),结果数组
class Solution {
    public int[] sortedSquares(int[] nums) {
        //双指针,左右平方对比,按顺序排列进数组
        int n = nums.length;
        int left = 0, right = n - 1, i = n - 1;
        int[] result = new int[n];//创建放置排序结果的数组
        while (left <= right) {
            if (nums[left] * nums[left] < nums[right] * nums[right]) {
                result[i] = nums[right] * nums[right];
                right--;//右指针向左
                i--;
            } else {
                result[i] = nums[left] * nums[left];
                left++;//左指针向右
                i--;
            }
        }
        return result;
    }
}
posted @ 2022-05-06 19:51  chachan53  阅读(20)  评论(0编辑  收藏  举报