LeetCode 977. 有序数组的平方

89 阅读1分钟

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] <= 104
  • nums 已按 非递减顺序 排序

进阶:

  • 请你设计时间复杂度为 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;
}