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 <= 104-104 <= nums[i] <= 104nums已按 非递减顺序 排序
进阶:
- 请你设计时间复杂度为
O(n)的算法解决本问题
题解
根据题目描述,主要是对平方的大小进行排序,这里采用了自己比较熟悉的遍历+插入排序,虽然时间复杂度没有达到要求,可以采用qsort进行快速排序,官方题解也给出了双指针法,正在研究中。
int* sortedSquares(int* nums, int numsSize, int* returnSize){
(*returnSize) = numsSize;
int* ans = malloc(sizeof(int) * numsSize);
for(int i=0;i<numsSize;i++){
int temp=nums[i]*nums[i];//平方
int j=i-1;
for(j=i-1;j>=0&&ans[j]>temp;j--){//插入排序
ans[j+1]=ans[j];
}
ans[j+1]=temp;
}
return ans;
}