标签:977 insert nums day2 mid pos 力扣 front reslst
题目
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
思路
当0号位小于0时,取出,使用二分查找将其绝对值插入,最后一起平方。注意长度为1时单独讨论
结果
不忍直视
代码
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
lenn = len(nums)
if(lenn==1):
nums[0] *= nums[0]
return nums
while(nums[0]<0):
temp = abs(nums[0]) #取出第一个负数的绝对值
del nums[0] #删除第一个负数
start,end = 0,lenn-2
mid = (start + end) / 2
while(start <= end):
mid = (start+end)/2
if(temp == nums[mid]):
nums.insert(mid+1,temp)
break #插入,跳出
elif(temp > nums[mid]):
start = mid+1
else:
end = mid-1
if(start > end):#没找到相等的
if(temp>nums[mid]):
nums.insert(mid + 1, temp)
else:
nums.insert(mid, temp)
for i in range(0,lenn):
nums[i] *= nums[i]
return nums
改进 双指针
头尾一起
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
'''双指针'''
reslst = []
front,post = 0,len(nums)-1
while(front != post):
f = abs(nums[front])
p = abs(nums[post])
if(f>p):
reslst.insert(0,f*f)
front+=1
else:
reslst.insert(0,p*p)
post-=1
reslst.insert(0, nums[front]*nums[front])
return reslst
但是这样时间很长,可能因为每次都在第一个加,动态变化 ,可以直接把答案列表设置成n个长度,用pos记录存放位置
class Solution:
def sortedSquares(self, nums):
n = len(nums)
ans = [0] * n
i, j, pos = 0, n - 1, n - 1
while i <= j:
if nums[i] * nums[i] > nums[j] * nums[j]:
ans[pos] = nums[i] * nums[i]
i += 1
else:
ans[pos] = nums[j] * nums[j]
j -= 1
pos -= 1
return ans
标签:977,insert,nums,day2,mid,pos,力扣,front,reslst 来源: https://blog.csdn.net/IT_muggle/article/details/118941605
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。