此文为阅读’代码随想录‘的leetcode刷题所写笔记。代码参考作者’程序员Carl‘(代码随想录)
参考链接:代码随想录
力扣题目链接
已知一个非递减数组, 要求返回该数组平方后的非递减数列.
分析
该数组的长度已知, 我们可以设置两个指针分别指向首和尾, 并向中间移动.
由于数组是有序的, 因此平方后最大的只会在两侧的其中一个, 因此可以每次在两端比较选择.
代码实现
Java
class Solution{
public int[] Result(int[] nums){
int n = num.length;
int i = 0;
int j = n-1;
int[] result;
while(i<=j){
if (nums[i]*nums[i] <= nums[j]*nums[j]){
result[n--] = nums[j]*nums[j];
j--;
}else {
result[n--] = nums[i]*nums[i];
i++;
}
}
return result;
}
}
Python
def solution(nums: List[int])-> List[int]:
n = len(nums)
i,j,k = 0,n-1,0
result = [-1]*n
while i<=j:
if nums[i]**2 <= nums[j]**2:
result[k] = num[i]**2
i+=1
k+=1
else:
result[k] = num[j]**2
j+=1
k+=1
return result