蓝桥杯训练第三天

一力扣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

3结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值