977.有序数组的平方

image.png

思路 这题目中文描述是真的2,非要反着描述, 非递减顺序的数组, 那不就是递增的数组吗

  1. 需要思考的点就是 最小的负数平方之后会发生变化, 负负得正,可能变成最大数
  2. 这样其实我们需要两个指针, 一个指向最左边, 一个指向最右边, 分别平方后,来比较他们的大小
  3. 创建一个新的数组,大小和nums一样, 创建一个索引k , 丛新数组的末位开始 k = 新数组的最大索引值
  4. 对比平方后的值, 如果if (nums[left] * nums[left] > nums[right] * nums[right]) 我们就将nums[left]的值放入新数组的最后面 k下标对应的位置 数组[k] = nums[left] *nums[left], left++ k--
  5. if (nums[left] * nums[left] <= nums[right] * nums[right]) 将nums[right]放入新数组中k--, right向前移动一位 right--
  6. 当left和right相遇时, 是同一个数, 剩下最后一位,放入新数组[k]即完成
    public int[] sortedSquares(int[] nums) {
        int[] result = new int[nums.length];
        int left = 0;
        int right = nums.length -1;
        int k = right;
        while (left <= right) {
            if (nums[left] * nums[left] > nums[right] * nums[right]) {
                result[k--] = nums[left] * nums[left];
                left++;
            } else {
                result[k--] = nums[right] * nums[right];
                right--;
            }
        }
        return result;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容