Leetcode刷题100天—977. 有序数组的平方(双指针)—day20
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—977. 有序数组的平方(双指针)—day20相关的知识,希望对你有一定的参考价值。
前言:
作者:神的孩子在歌唱
大家好,我叫运智
977. 有序数组的平方
难度简单286收藏分享切换为英文接收动态反馈
给你一个按 非递减顺序 排序的整数数组 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 <= 104
-104 <= nums[i] <= 104
nums
已按 非递减顺序 排序
进阶:
- 请你设计时间复杂度为
O(n)
的算法解决本问题
package 双指针;
import java.util.PriorityQueue;
public class _977_有序数组的平方 {
// 通过优先队列解决
public int[] sortedSquares(int[] nums) {
PriorityQueue<Integer> queue=new PriorityQueue<>();
for(int num:nums) {
queue.offer(num^2);
}
int i=0;
while(!queue.isEmpty()) {
nums[i]=queue.poll();
i++;
}
return nums;
}
// ps:效率太低了
// 通过双指针解决
public int[] sortedSquares1(int[] nums) {
// 定义双指针
int left=0,right=nums.length-1,index=right;
// 设置一个空数组
int[] ans=new int[nums.length];
while(left<=right) {
// 如果最右边大于最左边
int i=nums[left]*nums[left],j=nums[right]*nums[right];
if (i<j) {
// 将最大的数存入
ans[index]=j;
right--;
}else {
ans[index]=i;
left++;
}
index--;
}
return ans;
}
}
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于Leetcode刷题100天—977. 有序数组的平方(双指针)—day20的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—26. 删除有序数组中的重复项(数组)—day76
Leetcode刷题100天—26. 删除有序数组中的重复项(数组)—day76
Leetcode刷题100天—88. 合并两个有序数组(数组+双指针)—day23
Leetcode刷题100天—88. 合并两个有序数组(数组+双指针)—day23