283.移动零
方法一:双指针
使用双指针,左指针指向数组处理好序列的尾部,而右指针指向未处理序列的头部,每次当右指针指向非零数,左右指针值交换位置,左指针加一,而右指针不断右移
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
left = right =0
n = len(nums)
while right < n:
if nums[right]!=0:
nums[left],nums[right]=nums[right],nums[left]
left+=1
right+=1
11. 盛最多水的容器
方法一:双指针
左右指针分别从数组的左右边界开始,计算左右指针围成的面积(左右指针指向数据中较小值*指针间的距离)
对比左右指针对应值较小的一个,向内移动该指针,重新计算面积
左右指针移动到相遇结束,得到面积最大值
-
时间复杂度:O(N),双指针总计最多遍历整个数组一次。
-
空间复杂度:O(1),只需要额外的常数级别的空间。
class Solution:
def maxArea(self, height: List[int]) -> int:
L, R = 0, len(height)-1
max_S = 0
while(L<R):
S = min(height[L], height[R])*(R-L)
if height[L] <= height[R]:
L+= 1
else:
R -= 1
max_S =max(max_S, S)
return max_S