leetcode 977. 有序数组的平方

本文介绍了一种使用双指针技巧解决数组平方后元素重新排序的方法,通过左右指针比较并调整nums[left]*nums[left]和nums[right]*nums[right]的大小,将平方后的最大值存入结果数组res。关键在于维护指针移动的策略,确保最终数组按升序排列。

在这里插入图片描述
原题链接

  1. 首先定义一个数组res用来存储平方之后的数组值
  2. 因为将数组中的值平方之后的值,应该是最大值分布在开头和结尾,不可能分布在中间位置,因此只需比较开头结尾的值
  3. .定义 left right分别指向开头结尾
  4. 使用k保存 数组的长度,将每次 nums[left] * nums[left] nums[right] * nums[right]比较的值加入到k的位置,每次加入后,应该使k–
  5. 若是 nums[right] 的平方较大,则将right–
  6. 反之将left++
  7. 最终返回结果数组res
  8. 二刷:定义 res的索引 k ,每当给k 赋值后,就将k-- ,若是nums[right] * nums[right] 较大,则right- -,反之,left++
  9. 要注意while的条件是 left <= right 内部的判断条件也带有 = 号
class Solution {
    public int[] sortedSquares(int[] nums) {
        //使用双指针的做法
        //定义一个新的数组来保存结果
        int[] res = new int[nums.length];
        int left = 0;
        int right = nums.length - 1;
        //统计res的长度
        int k = res.length - 1;
        while(left <= right){
            if(nums[left] * nums[left] <= nums[right] * nums[right]){
                res[k] = nums[right] * nums[right];
                k--;
                right--;
            }else{
                res[k] = nums[left] * nums[left];
                k--;
                left++;
            }
        }
        //返回最后的结果
        return res;  
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值