IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Leetcode跟着饲养员分题型刷题(Python施工中) -> 正文阅读

[数据结构与算法]Leetcode跟着饲养员分题型刷题(Python施工中)

b站@爱学习饲养员
(按视频学习刷题的过程记录,不完全是按照up主的思路,有时候会参考热门的题解)

数组

  • 练习题 LC485
class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        if nums is None or len(nums) == 0:
            return 0

        count = 0
        result = 0
        for i in range(len(nums)):
            if nums[i] == 1:
                count += 1
                # result = max([result, count])
                if result < count:
                    result = count
            else:
                count = 0
        return result
  • 练习题 LC283
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        l = 0
        for r in range(n):
            if nums[r] != 0:
                nums[l] = nums[r]
                l += 1
        for i in range(l, n):
            nums[i] = 0
  • 练习题 LC27
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        # # 双指针
        # l = 0       
        # for r in range(len(nums)):
        #     if nums[r] != val:
        #         nums[l] = nums[r]
        #         l += 1
        # return l                


        # 双指针优化
        l = 0
        r = len(nums) - 1

        while(l<=r):
            if nums[l] == val:
                nums[l] = nums[r]
                r -= 1
            else:
                l += 1
        return l

在这里插入图片描述
??不知道为啥双指针优化的性能没有前面好

链表

  • 练习题 LC203
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: ListNode, val: int) -> ListNode:
        dummy = ListNode(0)
        dummy.next = head
        prehead = dummy
        while head:
            if head.val == val:
                prehead.next = head.next
            else:
                prehead = head
            head = head.next
        return dummy.next           
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
# 饲养员版本
# class Solution:
#     def reverseList(self, head: ListNode) -> ListNode:
#         dummy = ListNode(0, head)
#         while head and head.next:
#             hNext = head.next
#             dNext = dummy.next

#             dummy.next = hNext
#             head.next = hNext.next
#             hNext.next = dNext
#         return dummy.next

# 老杨迭代求解
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        prev = None
        while head:
            temp = head.next
            head.next = prev
            prev = head
            head = temp
        return prev

# # 老杨递归求解
# class Solution:
#     def reverseList(self, head: ListNode) -> ListNode:
#         if head is None or head.next is None:
#             return head
        
#         p = self.reverseList(head.next)
#         head.next.next = head
#         head = head.next
#         return p

队列

  • 练习题 LC933
class RecentCounter:

    def __init__(self):
        self.queue = deque()

    def ping(self, t: int) -> int:
        self.queue.append(t)
        while len(self.queue) > 0 and t - self.queue[0] > 3000:
            self.queue.popleft()
        return len(self.queue)

# Your RecentCounter object will be instantiated and called as such:
# obj = RecentCounter()
# param_1 = obj.ping(t)

  • 练习题 LC20
class Solution:
    def isValid(self, s: str) -> bool:
        if len(s) == 0 or len(s) == 1:
            return False
        
        stack = []
        for i in s:
            if i == '(' or i == '{' or i == '[':
                stack.append(i)
            else:
                if len(stack) == 0:
                    return False
                    
                if stack[-1] == '(' and i == ')':
                    stack.pop()
                elif stack[-1] == '{' and i == '}':
                    stack.pop()
                elif stack[-1] == '[' and i == ']':
                    stack.pop()
                else:
                    return False
        return True if len(stack) == 0 else False
    

哈希表

  • 练习题 LC217
class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        hashmap = {}
        for i in nums:
            if i in hashmap:
                hashmap[i] += 1
                if hashmap[i] >= 2:
                    return True
            else:
                hashmap[i] = 1

        return False
  • 练习题 LC389
class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        if len(s) == 0:
            return t
        
        # 字典
        # hashmap = {}
        # for i in s:
        #     if i not in hashmap:
        #         hashmap[i] = 1
        #     else:
        #         hashmap[i] += 1

        # for i in t:
        #     if i in hashmap:
        #         hashmap[i] += -1
        #     else:
        #         return i
        
        # for key, val in hashmap.items():
        #     if val != 0:
        #         return key
        
        # 数组
        hashmap = [0] * 26
        for i in s:
            hashmap[ord(i)-97] += 1
        for i in t:
            hashmap[ord(i)-97] += -1
        for i in range(26):
            if hashmap[i] != 0:
                return chr(i+97)

  • 练习题 LC496
    用了栈+哈希表
class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        if len(nums1) == 0 or len(nums2) == 0:
            return []

        stack = []
        hashmap = {}

        stack.append(nums2[0])
        for i in range(1, len(nums2)):
            while len(stack) != 0 and stack[-1] < nums2[i]:
                hashmap[stack[-1]] = nums2[i]
                stack.pop()
            stack.append(nums2[i])
                
        for i in stack:
            hashmap[i] = -1
        
        return [hashmap[i] for i in nums1]

集合

  • 练习题 LC217
class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        numsSet = set(nums)
        if len(numsSet) < len(nums):
            return True
        else:
            return False

比用哈希表快

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:48:16  更:2022-03-08 22:50:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:55:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码