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

题目来源于力扣(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));
}
posted @ 2020-06-23 19:50  知音12138  阅读(67)  评论(0编辑  收藏