977题目:
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
给你一个按 非递减顺序 排序的整数数组 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]
- 请你设计时间复杂度为
O(n)
的算法解决本问题
设置双指针来同时遍历数组,然后把数值平方更大的那一方加入到新的数组里面。
c 语言
int* sortedSquares(int* nums, int numsSize, int* returnSize)
{
*returnSize=numsSize;
int left=0;
int right=numsSize-1;
int k=numsSize-1;
int*result=(int*)malloc(sizeof(int)*numsSize);
for(left=0,right=numsSize-1,k=numsSize-1;left<=right;k--)
{
if(nums[left]*nums[left]>nums[right]*nums[right])
{
result[k]=nums[left]*nums[left];
left++;
}
else
{
result[k]=nums[right]*nums[right];
right--;
}
}
return result;
}
python 语言
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
left=0
right=len(nums)-1
k=len(nums)-1
#result=nums.copy() This can run in the jupyter but can not be run in the Leetcode
result = [0] * len(nums)
while k>=0:
if nums[left]*nums[left]>nums[right]*nums[right]:
result[k]=nums[left]*nums[left]
left+=1
else:
result[k]=nums[right]*nums[right]
right-=1
k-=1
return result
上述代码中注意事项为在C语言中的数组内存分配,和*returnSize=numsSize这一行的引用,便于最后结果的呈现
在python中list的初始化设置,在python中如果直接创建空列表的时候,使用[]这种index方式和insert这种方式都无法得到正确答案。