移除元素:
力扣链接:https://leetcode.cn/problems/remove-element/
left = 0
right = 0
while(right<len(nums)):
nums[left] = nums[right]
if nums[left] != val:
left = left +1
right = right + 1
return left
以数组nums= [0,1,2,2,3,0,4,2], val = 2为例:
![](https://img-blog.csdnimg.cn/img_convert/2601a0d288139bb0b9cde65e3517d35e.png)
有序数组的平方:
力扣链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
left = 0
l = len(nums)
right = l-1
result = [0]*l
for i in range(l):
if nums[left]*nums[left]>nums[right]*nums[right]:
result[l-1-i] = nums[left]*nums[left]
left = left + 1
else:
result[l-1-i] = nums[right]*nums[right]
right = right - 1
# print(result)
return result
以nums = [-7,-3,2,3,11]为例:
一个有序的数列,平方之后的数列是有规律的:
若原序列全为正数,则平方之后的序列递增;
若原序列即有正数,又有负数,则平方之后的序列先递减后递增;
若原序列全为负数,则平方之后的序列递减。
因此,不管原序列是什么情况,平方之后的到的序列最大值一定在两边取到,因此可用左右指针,比较左右两边的数值平方之后的大小,最终得到一个递增的序列。
![](https://img-blog.csdnimg.cn/img_convert/0311ac4117162d891ce43b390131c4a9.png)