【力扣】977. 有序数组的平方 <首尾指针>

这篇具有很好参考价值的文章主要介绍了【力扣】977. 有序数组的平方 <首尾指针>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【力扣】977. 有序数组的平方

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

示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]

示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示
1 <= nums.length <= 1 0 4 10^4 104
- 1 0 4 10^4 104 <= nums[i] <= 1 0 4 10^4 104
nums 已按非递减顺序排序

题解

暴力:平方后直接排序

class Solution {
    public int[] sortedSquares(int[] nums) {
   		//新数组,也可以在原数组上进行
        int[] ans = new int[nums.length];
        
        for (int i = 0; i < nums.length; ++i) {
            ans[i] = nums[i] * nums[i];	//nums[i] *= nums[i];
        }
        Arrays.sort(ans);
        return ans;
    }
}

首尾指针:每次比较两个指针对应的数,选择较大的那个逆序放入答案并往前移动指针。文章来源地址https://www.toymoban.com/news/detail-633081.html

class Solution {
    public int[] sortedSquares(int[] nums) {
        //新数组
        int[] ans = new int[nums.length];

        int left = 0, right = nums.length-1;
        int pos = nums.length-1;
        
        while(left <= right) {
            if (nums[left]*nums[left] > nums[right]*nums[right]) {
            	//更新ans数组,从大到小
                ans[pos] = nums[left]*nums[left];
                ++left;
            }
            else {
            	//更新ans数组,从大到小
                ans[pos] = nums[right]*nums[right];
                --right;
            }
            --pos;
        }
        return ans;
    }
}

到了这里,关于【力扣】977. 有序数组的平方 <首尾指针>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包