首页 > 其他分享 >datawhale-leetcode打卡:038~050题

datawhale-leetcode打卡:038~050题

时间:2024-01-30 19:33:56浏览次数:28  
标签:return nums int self stack 打卡 050 leetcode def

两数相加(leetcode 002)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        if not l1:
            return l2
        if not l2:
            return l1

        l1.val += l2.val    # 将两数相加,赋值给 l1 节点
        if l1.val >= 10:
            l1.next = self.addTwoNumbers(ListNode(l1.val // 10), l1.next)
            l1.val %= 10
        
        l1.next = self.addTwoNumbers(l1.next, l2.next)
        return l1

最小栈(leetcode 155)

主要就是熟悉一下面向对象的用法。

class MinStack:
    def __init__(self):
        self.stack=[]
    def push(self, val: int) -> None:
        self.stack.append(val)
    def pop(self) -> None:
        self.stack.pop()
    def top(self) -> int:
        return self.stack[-1]
    def getMin(self) -> int:
        return min(self.stack)
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

有效的括号(leetcode 020)

这是以前面试的时候做过的一个题目,我这里重新写一下。

class Solution:
    def isValid(self, s: str) -> bool:
        stack=[]
        for i in s:
            stack.append(i)
            if len(stack)>1:
                if stack[-2]+stack[-1]=='()' or stack[-2]+stack[-1]=='[]' or stack[-2]+stack[-1]=='{}':
                    stack.pop()
                    stack.pop()
        return len(stack)==0

基本计算器II(leetcode 227)

class Solution:
    def calculate(self, s: str) -> int:
        return int(eval(s))

用栈实现队列(leetcode 232)

class MyQueue:
    def __init__(self):
        self.queue=[]
    def push(self, x: int) -> None:
        self.queue.append(x)
    def pop(self) -> int:
        a=self.queue[0]
        self.queue=self.queue[1:]
        return a
    def peek(self) -> int:
        return self.queue[0]
    def empty(self) -> bool:
        return self.queue==[]
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()

最长有效括号(leetcode 032)

这个题估计还是考动态规划,算了我这里简写一下

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        a=[-1]
        ans=0
        for i in range(len(s)):
            if s[i]=='(':
                a.append(i)
            else:
                a.pop()
                if not a:
                    a.append(i)
                else:
                    ans=max(ans,i-a[-1])
        return ans

接雨水(leetcode 042)

class Solution:
    def trap(self, height: List[int]) -> int:
        maxl = maxr = 0
        n = len(height)
        list = [0] * n
        for i in range(n):
            maxl = max(maxl, height[i])
            list[i] = maxl
        for i in range(n-1,-1,-1):
            maxr = max(maxr,height[i])
            list[i] = min(list[i],maxr)
            height[i]=list[i]-height[i]
        return sum(height)

用队列实现栈(leetcode 225)

class MyStack:
    def __init__(self):
        self.stack=[]
    def push(self, x: int) -> None:
        self.stack.append(x)
    def pop(self) -> int:
        a=self.stack.pop()
        return a
    def top(self) -> int:
        return self.stack[-1]
    def empty(self) -> bool:
        return len(self.stack)==0
# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

两数之和(leetcode 001)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        n=len(nums)
        for i in range(n):
            for j in range(i+1,n):
                if nums[i]+nums[j]==target:
                    return [i,j]

三数之和(leetcode 015)

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        
        n=len(nums)
        res=[]
        if(not nums or n<3):
            return []
        nums.sort()
        res=[]
        for i in range(n):
            if(nums[i]>0):
                return res
            if(i>0 and nums[i]==nums[i-1]):
                continue
            L=i+1
            R=n-1
            while(L<R):
                if(nums[i]+nums[L]+nums[R]==0):
                    res.append([nums[i],nums[L],nums[R]])
                    while(L<R and nums[L]==nums[L+1]):
                        L=L+1
                    while(L<R and nums[R]==nums[R-1]):
                        R=R-1
                    L=L+1
                    R=R-1
                elif(nums[i]+nums[L]+nums[R]>0):
                    R=R-1
                else:
                    L=L+1
        return res

缺失的第一个正数(leetcode 042)

遍历就行

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        for i in range(1,max(nums)):
            if i not in nums:
                return i
        return max(nums)+1

最长连续序列(leetcode 128)

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        if not nums: # 如果是空列表,直接返回0
            return 0
        s=set(nums)
        chuliguo=set() #创建一个集合来记录**处理过**的数字,如果未处理过,就加入其中
        res=0
        for x in nums:
            do=0   # 记录每次遍历时的结果
            if x in chuliguo:
                continue    # 如果处理过了,就直接跳过该数字
            chuliguo.add(x) #未处理过的,加入处理过的这个集合
            temp=x          # 用一个临时变量来记录此时x的值
            while x-1 in s:  # 如果x-1也在s里面,那么就把他也处理了
                chuliguo.add(x-1) # 把他加入处理过的集合,因为如果不加入,再次执行到它时,执行的是重复的操作
                do+=1  # 这次执行的结果也要加一
                x-=1  # 再去看x-1...直到x-1不再在s中
            x=temp   #  因为经过上述操作,我们x值已经发生了改变,此时我们要赋回原值
            while x+1 in s: # 再去看x+1
                chuliguo.add(x+1)
                do+=1
                x+=1
            res=max(do,res) #在每一次遍历中,将res重新赋值
        return res+1 #返回res+1,+1是因为我们在最初处理x的时候没有把他原来的数的次数加到里面

标签:return,nums,int,self,stack,打卡,050,leetcode,def
From: https://www.cnblogs.com/Mast1031/p/17997808

相关文章

  • leetcode 42 单调栈解法
    Problem:42.接雨水目录思路解题方法复杂度Code思路作为自己独立完成的第一道困难题,我觉得有必要纪念一下。就是单调栈的思路,不过需要减去栈中的每一项才是雨水的体积。最后一个因为不是柱子,所以在结束循环时可能会出现栈未空的情况,需要倒着再考虑一遍。解题方法遇到比当......
  • LeetCode 2808 使循环数组所有元素相等的最少秒数
    题目描述原题链接:2808.使循环数组所有元素相等的最少秒数解题思路每次变化可以选择变成前一个元素或后一个元素,包括[0]和[n-1]的转化;换个角度思考,每秒最多可以有两个不同元素nums[i-1]和nums[i+1]变化成nums[i]元素;假设nums[i]元素只出现一次,想要将所有元素同化那么......
  • Leetcode刷题第五天-二分法-回溯
    215:第k个最大元素链接:215.数组中的第K个最大元素-力扣(LeetCode)em~~怎么说呢,快速选择,随机定一个目标值,开始找,左边比目标小,右边比目标大,左右同时不满足时,交换左右位置,直到左指针比右指针大,交换目标和右指针位置的值,此时右指针位置即时目标值的在排序好数组中的位置,如果k在右......
  • leetcode--98. 验证二叉搜索树(bfs)
    记录13:502024-1-28https://leetcode.cn/problems/validate-binary-search-tree/想岔方向了,想的太复杂了。首先思路是每个root节点必须大于左子树的最大节点,小于右边子树的最小节点。我的做法是记录下叶子节点,因为左边叶子节点的集合(vector)的最后一个节点为左子树的最大值......
  • Leetcode刷题第四天-双指针-二分法
    15:三个数之和链接:15.三数之和-力扣(LeetCode)em...双冲for循环,从头去遍历,0-(a+b)是否在列表中,最终timeout数组从小到大排序,设置三个指针,i从头遍历到lens-1,j从i+1开始,k从lens-1开始,sums==0,放入结果,大于0,k-1,小于0,j+1如果i和i+1比较,相同跳过的话,会丢结果,i和i-1相等跳过,因为i-1已......
  • 20240126打卡——《构建之法》第5~8章
    第五章团队和流程5.2软件团队的模式主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式、官僚模式5.3开发流程①写了再改模式②瀑布模型(WaterfallModel)是一个项目开发架构,开发过程是通过设计一系列阶段顺序......
  • 幻隐HV2050 512G SSD评测
    PDD商品介绍页面总写入量还是比较差的,512GB为300TBW,只能达到长江存储自封颗粒的一半(以长江PC300为例,512GB写入寿命是600TBW)。ASSSDBenchmark测试1GB缓内写入,基本能达到标称的速度。CrystalDiskinfoWindows写入文件测试,写入总量为124GB,缓内速度约在1.5~1.7G/s之间,在复制6......
  • [LeetCode] 2859. Sum of Values at Indices With K Set Bits
    Youaregivena0-indexedintegerarraynumsandanintegerk.Returnanintegerthatdenotesthesumofelementsinnumswhosecorrespondingindiceshaveexactlyksetbitsintheirbinaryrepresentation.Thesetbitsinanintegerarethe1'sprese......
  • 码农面试宝典之leetcode刷题手册
    今年的经济形势和行业状况可以说对求职者来说很不友好,你们是否曾因为面对编程面试题而感到迷茫?是否渴望提升自己的算法技能顺利跨入大厂?让我向你们推荐一项强大的利器——LeetCode刷题手册,它将成为你找到理想工作的秘密武器。LeetCode作为全球最受欢迎的在线编程平台之一,不仅拥有......
  • 20240125打卡——《构建之法》读书笔记第1~4章
    第一章概论在这一章中,作者为我们介绍了一些关于软件工程的基本知识。①软件=程序+软件工程:正是因为对软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容的完成,才能完成把整个程序转化成为一个可用的软件的过程。扩展的推论:软件企业=软件+商业模式......