977. Squares of a Sorted Array有序数组的平方Java

给定一个nums按非降序排序的整数数组,返回一个按非降序排序的每个数字的平方数组

示例 1:
输入: nums = [-4,-1,0,3,10]
输出: [0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]。
排序后变成[0,1,9,16,100]。

示例 2:
输入: nums = [-7,-3,2,3,11]
输出: [4,9,9,49,121]

约束:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums以非降序排序。

Follow up:对每个元素进行平方并对新数组进行排序非常简单,您能找到O(n)使用不同方法的解决方案吗?

–思路–
对比数组左右两个位置的绝对值大小,选择大的添加到结果数组末尾

  1. 初始化一个相同长度数组
  2. 设置左右两个指针,一个index用来给新数组末尾添加数据
  3. 对比左右两个数的绝对值大小,将大的平方之后添加到末尾,根据情况移动左右指针
  4. index-1
class Solution {
    public int[] sortedSquares(int[] nums) {
        int left=0,right=nums.length-1,index=nums.length-1;
        int[] res=new int[nums.length];
        while (left <= right) {
            if (Math.abs(nums[left]) < Math.abs(nums[right])) {
                res[index]=nums[right]*nums[right];//或者用 (int)Math.pow(nums[r],2)
                right--;
            }else{
                res[index]=nums[left]*nums[left];
                left++;
            }
            index--;
        }
        return res;
    }
}

时间复杂度O(n/2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值