LeetCode977. 有序数组的平方
题目描述#
给你一个按 非递减顺序 排序的整数数组 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]
第一次提交的代码
class Solution {
public int[] sortedSquares(int[] nums) {
for(int i=0;i<nums.length;i++){
nums[i]=nums[i]*nums[i];
}
QuickSort(nums,0,nums.length-1);
return nums;
}
public void QuickSort(int[] nums,int low,int high){
if(low<high){
int pivotalPosition = Partition(nums,low,high);
QuickSort(nums,low,pivotalPosition-1);
QuickSort(nums,pivotalPosition+1,high);
}
}
public int Partition(int[] nums,int low,int high){
int pivot=nums[low];
while(low<high){
while(low<high&&pivot<=nums[high])high--;
nums[low]=nums[high];
while(low<high&&pivot>=nums[low])low++;
nums[high]=nums[low];
}
nums[low]=pivot;
return low;
}
}
学习到的东西#
自己提交的第一遍代码击败了多少多少用户,我才从大佬那里知道,这玩意没用- -
先说下自己的算法吧,时间复杂度为O(n)+O(nlogn),题目描述下面写了最好的时间复杂度为O(n)
并且自己的代码提交了多次才通过,原因是对于算法的生疏,快速排序好久没写了,最后的nums[low]=pivot写成了nums[0]=pivot,欠考虑了。
后面看了大佬的解法:双指针法
思想:一个非递减的数组,将当前整个数组作为一个整体可知,最大值一定是最左边或者
最右边索引对应的平方值。所以可以创建一个和原数组相同大小新的数组(!!!!!以后一定不要再将当初考研题目的要求,将空间复杂度看的如此之重!!!当前电子产品的发展,还是要倾向于时间复杂度!),左右指针分别指向原数组的最大索引和最小索引,创建一个新的指针用于指向result数组的最大索引,原数组的两个指针在左右两个方向分别计算平方谁是老大,老大优先进入结果数组的最大索引并将新数组的索引减一,原数组的索引,如果左边的平方为最大,则low++,否则high--,继而将原数组的剩余部分当成一个新的整体,还是那个思想(最大值一定出现在最左边或者最右边的位置)
这个算法的图解地址
最终实现的代码为:
class Solution {
public int[] sortedSquares(int[] nums) {
int[] result=new int[nums.length];
int low=0;
int high=nums.length-1;
int target=nums.length-1;
while(low<high){
if(nums[low]*nums[low]<nums[high]*nums[high]){
result[target--]=nums[high]*nums[high];
high--;
}else{
result[target--]=nums[low]*nums[low];
low++;
}
}
result[target]=nums[low]*nums[low];
return result;
}
}
作者:whitePuPigeon
出处:https://www.cnblogs.com/whitePuPigeon/p/17763192.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】