首页 > 编程语言 > 详细

977. 有序数组的平方『简单』

时间:2020-06-23 20:13:04      阅读:85      评论:0      收藏:0      [点我收藏+]

题目来源于力扣(LeetCode

一、题目

977. 有序数组的平方

题目相关标签:数组、双指针

技术分享图片

提示:

  • 1 <= A.length <= 10000
  • -10000 <= A[i] <= 10000
  • A 已按非递减顺序排序。

二、解题思路

  1. 定义左右双指针,结果数组及 index 索引

  2. 通过双指针遍历数组 A

  3. 左右两个指针上的元素进行取绝对值的操作(因为有负数的存在,且负数的平方是正数

  4. 取绝对值后的两个正数进行判断

  5. 若左指针上的元素大于右指针元素,则左指针上的元素的平方存储到结果数组的 index 索引上,且左指针右移一位

  6. 否则右指针上的元素的平方存储到结果数组的 index 索引上,且右指针左移一位

三、代码实现

public static int[] sortedSquares(int[] A) {
    // 创建数组,存储结果
    int[] nums = new int[A.length];
    int left = 0;
    int right = nums.length - 1;
    // 记录往 nums 数组中插入元素的索引
    int index = right;

    while (left <= right) {
        // 取两指针上元素的绝对值
        int a = Math.abs(A[left]);
        int b = Math.abs(A[right]);
        // 进行比较,较大的数存储到结果数组中,相应的指针索引改变
        if (a > b) {
            nums[index--] = a * a;
            left++;
        } else {
            nums[index--] = b * b;
            right--;
        }
    }
    return nums;
}

四、执行用时

技术分享图片

五、部分测试用例

public static void main(String[] args) {
    int[] nums = {-4, -1, 0, 3, 10};  // output: {0, 1, 9, 16, 100}
//    int[] nums = {-7, -3, 2, 3, 11};  // output: {4, 9, 9, 49, 121}

    int[] result = sortedSquares(nums);
    System.out.println(Arrays.toString(result));
}

977. 有序数组的平方『简单』

原文:https://www.cnblogs.com/zhiyin1209/p/13184117.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!