前两天课比较多,而且项目比较费时间,停了两天,今天确定蓝桥杯是4月13日举行个人赛省赛,满打满算也就45天了,时间真紧啊,感觉刷完代码随想录真有点难度,加油吧!
一、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)的算法解决本问题
很简单的逻辑,想一下就明白了,就是把原数组中平方后的最大数放在最右边,然后第二大的放在最右边-1,一直到最小的数
因为数组有正有负,且非递减,那么平方后最大的数要么最左边的,要么最右边的,因此需要if进行判断
class Solution {
public int[] sortedSquares(int[] nums) {
int rightIndex = nums.length - 1;
int[] result = new int[nums.length];
int index = result.length - 1;
int leftIndex = 0;
while (leftIndex <= rightIndex) {
if (nums[leftIndex] * nums[leftIndex] > nums[rightIndex] * nums[rightIndex]) {
result[index--] = nums[leftIndex] * nums[leftIndex];
// 等效于
// result[index] = nums[leftIndex] * nums[leftIndex];
// index--;
++leftIndex;
// 写成leftIndex++; 也可以,此处没有影响
} else {
result[index--] = nums[rightIndex] * nums[rightIndex];
--rightIndex;
// 写成rightIndex--; 也可以,此处没有影响
}
}
return result;
}
}
文章介绍了如何在非递减排序的整数数组中,按非递减顺序计算每个数字的平方并返回新数组。提供了Solution类的代码实现,强调了使用O(n)时间复杂度的解决方案。
1044

被折叠的 条评论
为什么被折叠?



