LeetCode——977.有序数组的平方

通过万岁!!!

  • 题目:要求对一个有序数组,每个数进行平方,并且还是有序的。注意这里面由负数。
  • 基本思路:先将负数转换为正数,然后sort,然后再fori遍历,进行平方。时间复杂度就是排序的时间复杂度。
  • 进阶思路:也就是时间复杂度为o(n)。其实核心就是我们找到正数和负数的分界线,然后双指针即可。找到以后,一个正数指针,一个负数指针,然后定义一个返回的数组ans,依次填充到ans中即可。

java代码——基本思路

class Solution {
    public int[] sortedSquares(int[] nums) {
        int len = nums.length;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < 0) {
                nums[i] = -nums[i];
            } else {
                break;
            }
        }
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            nums[i] *= nums[i];
        }
        return nums;
    }
}

java代码——进阶思路

class Solution {
    public int[] sortedSquares(int[] nums) {
        int len = nums.length;
        int positiveIdx = 0;
        int[] ans = new int[len];
        while (positiveIdx < len && nums[positiveIdx] < 0) {
            positiveIdx++;
        }
        int negativeIdx = positiveIdx - 1;
        int idx = 0;
        while (negativeIdx >= 0 && positiveIdx < len) {// 都不会越界
            if (-nums[negativeIdx] > nums[positiveIdx]) {
                ans[idx++] = nums[positiveIdx] * nums[positiveIdx++];
            } else {
                ans[idx++] = nums[negativeIdx] * nums[negativeIdx--];
            }
        }
        while (negativeIdx >= 0) {
            ans[idx++] = nums[negativeIdx] * nums[negativeIdx--];
        }
        while (positiveIdx < len) {
            ans[idx++] = nums[positiveIdx] * nums[positiveIdx++];
        }
        return ans;
    }
}
  • 总结:题目比较简单,主要是进阶思路。但是进阶思路的空间复杂度会有所提升,因为我们需要定义一个ans数组,用来存储我们要返回的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值