leetcode 977.有序数组的平方

题目链接:

977. 有序数组的平方

要求:

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

解答:

这个题目暴力解法比较简单,就是先平方,后排序,时间复杂度取决于排序的方法的时间复杂度,这个暴力破解就不展示代码了。

如果使用双指针呢?这个双指针有点动态规划的感觉,就是每次比较两端,必然能得到一个最大值,最大值的一端移动一位,左端大右移,右端大左移,这样当两个指针相交,元素就遍历了一遍,就可以得到结果,这个需要额外的一个空间消耗。代码如下:

/**
 * 最简单的方法就是暴力,全部平方之后,然后重新排序
 * 双指针的方法进行交换,这个应该如何思考呢?就是从两端考虑,必然能取到最大值
 *
 * @param nums 数组
 * @return 平方后的数组
 */
public static int[] sortedSquares(int[] nums) {
    int[] result = new int[nums.length];
    int resultIndex = nums.length - 1;
    int left = 0, right = nums.length - 1;
    while (left <= right) {
        if (nums[left] * nums[left] <= nums[right] * nums[right]) {
            result[resultIndex --] = nums[right] * nums[right];
            right --;
        } else {
            result[resultIndex --] = nums[left] * nums[left];
            left ++;
        }
    }
    return result;
}
posted @   庄子游世  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示