• 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));
    }
    
  • 相关阅读:
    【面试题总结】第三篇
    Django 多账号登录
    Zabbix3.2 监控搭建
    2017.09.24校内训练
    2017.09.06校内训练
    tyvj P1001 第K极值
    洛谷P1020导弹拦截
    洛谷P1006传纸条
    2017.09.10校内训练
    hdu_1086 You can Solve a Geometry Problem too
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/13184117.html
Copyright © 2020-2023  润新知