【力扣】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 已按非递减顺序排序
题解
暴力:平方后直接排序文章来源:https://www.toymoban.com/news/detail-633081.html
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模板网!