欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥杯训练第三天

程序员文章站 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

3结果

蓝桥杯训练第三天