发布时间:2023-02-06 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

977. 有序数组的平方

题目描述

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

思路

  1. 我采用的是双指针进行解答
  2. 首先应明确,数组是有序数组,那么在考虑复数的情况下,平方后的最小值一定在数组的两端,那么便可以设置左指针left与右指针right,并设置数组result对平方后排序的结果进行存储,也应当设置temp作为中间变量方便数组result的存储
  3. 对于循环条件left <= right便是要进行完全数组的遍历
  4. 在循环中,我们应当对最左端与最右端数值的平方大小进行判断,取较大的一方存入数组result中,这里需要注意的是,由于result数组我们是按照递增数组进行排序的,所以temp = result.legnth -1,在存入一个数值后,进行temp--操作,然后按照存入的是最右端还是最左端进行相应操作,以便进行下一个数据的判断。
  5. 若想无脑做的话可以直接将每个数据的平方求出,再将数组进行排序,这里并未采用

代码

class Solution {
    public int[] sortedSquares(int[] nums) {
         int left = 0;
         int right = nums.length - 1;
         int[] result = new int[nums.length];
         int temp = result.length - 1;
         while(left <= right){
            if(nums[left] * nums[left] > nums[right] * nums[right]){
                result[temp] = nums[left] * nums[left];
                temp--;
                left++;
            }
            else{
                result[temp] = nums[right] * nums[right];
                temp--;
                right--;
            }
         }
         return result;
    }
}

提交截图

有序数组的平方-力扣(Java)