蓝桥杯训练第三天
程序员文章站
2022-05-24 09:38:00
...
一力扣11
1思路
- 首先我们要确认这是一个迭代最大值的过程,所以可以确定在迭代过程中更新的量,是长度l和两边遍历到的最小值
- 选择两方指针缩进的遍历方式,一方取最左边,角标a,一方最右边角标b,
- 中间量ans=max(ans,new_ans)就是不断寻找最大值过程,这也是启发式算法的一种
- 既然从两边迭代,那么我们肯定以右边《左边或者左边》右边作为迭代结束的条件
- 我们在根据左右两边的大小分情况讨论,来决定哪边的角标移动
2代码
class Solution:
def maxArea(self, height: List[int]) -> int:
sum=0
a=0
b=len(height)-1
while a<b:
if height[a]<height[b]:
sum=max(sum,height[a]*(b-a))
a=a+1
else:
sum=max(sum,height[b]*(b-a))
b=b-1
return sum
结果
二力扣14
1思路
- 我们可以使用zip的方法,将str中每个字符串的每个元素对应打包
- *strs是解压元素,将每个字符串释放出来,然后再用zip合成
- 详情可参考链接: 菜鸟pythonzip讲解.
2代码
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
ans=''
#flag=1
for i in zip(*strs):#解压打包,将每个字目对应打包
if len(set(i))==1 :#打包的每个元素是否唯一
ans+=i[0]
continue
break
#flag=0
return ans
3结果
3力扣题目15
1思路
- 选定一个数进行遍历,再排序且无重复的数组
- 选定两个指针一坐一右进行循环,直到左边到达右边
- 用一个列表承载三个数的集合
- 排除排序后最左边大于0和指针两个小于0的异常情况
2代码
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
ans=[]
res=[]
nums.sort()
num=nums1
if len(num)<=2:
return []
for i in range(len(num)-2):
if num[i]>0:
break
a=1+i
b=len(num)-1
while a<b:
if num[a]+num[b]<0:
break
if num[a]+num[b]>-num[i]:
b-1
elif num[a]+num[b]<-num[i]:
a+1
else:
res=[]
res.extend([num(i),num[a],num[b]])
ans.append(res)
a+1
return ans