携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情
题目详情
LeetCode题库序号 977. 有序数组的平方 ,难度为 简单。
Tag : 「直接排序」
给你一个按 非递减顺序 排序的整数数组 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已按 非递减顺序 排序
直接排序
题解思路:这道题目是非常简单的入门题目,根据题目的意思,我们可以使用最简单的用法,先循环数组去求得每个索引上的数字的平方和。然后再进行排序后,即可得到我们需要的答案,但是这个方法是比较简单的,消耗了较多的时间去计算和排序,我们可以使用双指针的形式,来缩小这个时间复杂度的。详情见以下代码:
题解代码
class Solution {
public int[] sortedSquares(int[] nums) {
int len = nums.length;
int negative = -1;
for (int i = 0; i < len; ++i) {
if (nums[i] < 0) {
negative = i;
} else {
break;
}
}
int[] ans = new int[n];
int index = 0, i = negative, j = negative + 1;
while (i >= 0 || j < len) {
if (i < 0) {
ans[index] = nums[j] * nums[j];
++j;
} else if (j == len) {
ans[index] = nums[i] * nums[i];
--i;
} else if (nums[i] * nums[i] < nums[j] * nums[j]) {
ans[index] = nums[i] * nums[i];
--i;
} else {
ans[index] = nums[j] * nums[j];
++j;
}
++index;
}
return ans;
}
}
结尾
我的"刷完LeetCode题库"系列文章的第 No.977 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!
思路虽然不是最优的,但是我会尽我所能!
为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/… 。