python算法-移动零盛最多的水--Day021
文章目录
- 前言
- 采用创新方式,精选趣味、实用性强的例子,从不同难度、不同算法、不同类型和不同数据结构进行总结,全面提升算法能力。
- 例1.移动零
- 例2.盛最多的水
前言
采用创新方式,精选趣味、实用性强的例子,从不同难度、不同算法、不同类型和不同数据结构进行总结,全面提升算法能力。
例1.移动零
给定⼀个数组 nums ,编写⼀个函数将所有 0 移动到数组的末尾,同时保持⾮零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进⾏操作。
示例:输⼊: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
代码如下(示例):
class sol:def movezero(self,li):left,right = 0,0#设置双指针while right< len(li):#设置循环条件if li[right] != 0:li[left],li[right] = li[right],li[left]#当右指针不等于零时,左指针和右指针的值进行交换left += 1#满足交换,左指针加1right += 1
li = [2,1,0,0,3,0,5,0]
ss = sol()
ss.movezero(li)
print(li)
得到的结果:[2, 1, 3, 5, 0, 0, 0, 0]
例2.盛最多的水
给定⼀个⻓度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和
(i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的⽔。
返回容器可以储存的最⼤⽔量。
示例:
输⼊: [1,8,6,2,5,4,8,3,7]
输出: 49
代码如下(示例):
class sol:def sheng(self,li):left,right = 0,len(li)-1#初始化双指针res = 0 # 记录最大面积while left < right: # 遍历所有可能的容器area = (right - left)*min(li[right],li[left])res = max(res,area)# 更新最大值if li[left] < li[right]:# 移动较小高度的指针left += 1else:right -= 1return res
ss = sol()
li = [1,8,6,2,5,4,8,3,7]
a = ss.sheng(li)
print(a)
得到的结果:49