数据结构与算法 数组篇之有序数组的平方

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

题目链接:. - 力扣(LeetCode)

两种解决思路:

1.直接平方+快排(日常解题中的惯性思维)

2.双指针(为了通过工作笔试不得不培养的思维)

题目中明确表示了该数组是按非严格递增的顺序进行排序的,因此利用好这个条件,也就是从侧边反映了该数组平方之后的最大值就是在数组的两端边界处。即可将双指针放在数组的一头一尾,后续慢慢收缩即可。

提示就到这边啦,如果还是不理解或者代码敲不出来的伙伴,可以前往代码随想录,查看Carl大神的具体讲解与操作。

这是我理解之后敲的代码,与Carl不同的是循环条件的不同,因人而异,我个人感觉我的比较容易理解一些(毕竟是自己理解过后的)

class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] res=new int[nums.length];
        int k=nums.length-1;
        int i=0;
        int j=nums.length-1;
        while(i<=j){
            if(nums[i]*nums[i]<nums[j]*nums[j]){
                res[k]=nums[j]*nums[j];
                k--;
                j--;
            }else{
                res[k]=nums[i]*nums[i];
                k--;
                i++;
            }
        }
        return res;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值