2024.5.5 —— LeetCode 高频题复盘

目录

  • 152. 乘积最大子数组
  • 83. 删除排序链表中的重复元素
  • 695. 岛屿的最大面积
  • 198. 打家劫舍
  • 139. 单词拆分
  • 堆排序
  • 24. 两两交换链表中的节点
  • 560. 和为 K 的子数组
  • 209. 长度最小的子数组
  • 297. 二叉树的序列化与反序列化

152. 乘积最大子数组


题目链接

Python

class Solution:
    def maxProduct(self, nums: List[int]) -> int:
        pre_max=pre_min=res=nums[0]
        for i in range(1,len(nums)):
            cur_max=max(pre_max*nums[i],nums[i],pre_min*nums[i])
            cur_min=min(pre_max*nums[i],nums[i],pre_min*nums[i])
            pre_max=cur_max
            pre_min=cur_min
            res=max(pre_max,res)
        return res

83. 删除排序链表中的重复元素


题目链接

Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution:
    def deleteDuplicates(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head:
            return None
        cur=head
        while cur.next:
            if cur.val==cur.next.val:
                cur.next=cur.next.next
            else:
                cur=cur.next
        return head

695. 岛屿的最大面积


题目链接

Python

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        def dfs(x, y):
            area = grid[x][y] # 计算与其连接的陆地的面积
            used[x][y] = True # 将与其连接的陆地都标记为True(已经访问过)
            for d in dirs:
                nx, ny = x + d[0], y + d[1]
                if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] == 1 and used[nx][ny] == False:
                    area += dfs(nx, ny)
            return area

        m,n=len(grid),len(grid[0])
        used = [[False] * n for _ in range(m)]
        dirs = [(1, 0), (-1, 0), (0, 1), (0, -1)]
        res = 0
        for i in range(m):
            for j in range(n):
                if used[i][j] == False and grid[i][j] == 1:
                    area = dfs(i, j)
                    res = max(res, area)
        return res

哔哩哔哩暑期实习考过这题。在做该题之前建议先做 200. 岛屿数量

198. 打家劫舍


题目链接

Python

class Solution:
    def rob(self, nums: List[int]) -> int:
        # dp[i]表示到nums[i](含)所能偷的最大金额
        n=len(nums)
        if n==1:
            return nums[0]
        dp=[0]*len(nums)
        dp[0]=nums[0]
        dp[1]=max(nums[0],nums[1])
        for i in range(2,n):
            dp[i]=max(dp[i-1],dp[i-2]+nums[i])
        return dp[-1]

139. 单词拆分


题目链接

Python

class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        n=len(s)
        dp=[False]*(n+1)
        dp[0]=True # dp[i]的i表示字符串的长度
        # 背包
        for i in range(n): # i是指字符串的开始索引,0~n-1
            # 物品
            for j in range(i+1,n+1): # j是指字符串的结束索引,i+1~n(字符串截取不包括结束索引)
                if dp[i] and s[i:j] in wordDict:
                    dp[j]=True
        return dp[n]

该题属于 完全背包 问题,完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。核心代码中两层for循环是可以完全颠倒的,先遍历背包后遍历物品,先遍历物品再遍历背包都是可以的。

  • 求组合数:先遍历物品再遍历背包。
  • 求排列数:先遍历背包后遍历物品

堆排序


题目链接

Python

class Solution:
    def adjust(self,nums,parent,length):
        """
        nums:待排序数组
        parent:父结点的索引
        length:参与调整的数组长度(结点个数)
        """
        child=parent*2+1
        while child<length:
            if child+1<length and nums[child+1]>nums[child]:
                child+=1
            if nums[parent]<nums[child]:
                nums[parent],nums[child]=nums[child],nums[parent]
                parent=child
                child=2*parent+1
            else:
                break

    def sortArray(self, nums: List[int]) -> List[int]:
        # 建立堆结构
        for i in range(len(nums)//2-1,-1,-1):
            self.adjust(nums,i,len(nums))
        for i in range(len(nums)-1,0,-1):
            nums[0],nums[i]=nums[i],nums[0]
            self.adjust(nums,0,i)
        return nums

24. 两两交换链表中的节点


题目链接

Python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution:
    def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
        dummy=ListNode(next=head)
        cur=dummy
        while cur.next and cur.next.next:
            node1=cur.next
            node3=cur.next.next.next
            cur.next=cur.next.next # node2
            cur.next.next=node1
            # 两个两个地交换
            node1.next=node3
            cur=cur.next.next
        return dummy.next

560. 和为 K 的子数组


题目链接

Python

class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        from collections import defaultdict
        presums=defaultdict(int)
        presums[0]=1
        count=0
        presum=0
        for i in range(len(nums)):
            presum+=nums[i]
            # 下面两行不能交换顺序
            count+=presums[presum-k] # 利用defaultdict的特性,当【presum-k不存在】时,返回的是0。这样避免了判断,如果交换了顺序会导致presum-k可能存在,如输入:[1] 0
            presums[presum]+=1 
        return count

209. 长度最小的子数组


题目链接

Python

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        s=0
        i=0
        inf=float("inf")
        res=inf
        n=len(nums)
        for j in range(n):
            s+=nums[j]
            while s>=target:
                res=min(res,j-i+1)
                s-=nums[i]
                i+=1
        return 0 if res==inf else res

297. 二叉树的序列化与反序列化


题目链接

Python

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
from collections import deque
class Codec:
    # BFS解法
    def serialize(self, root):
        """Encodes a tree to a single string.
        序列化二叉树:二叉树->字符串
        :type root: TreeNode
        :rtype: str
        """
        if not root:
            return "[]"
        q=deque([root])
        res=[]
        while q:
            node=q.popleft()
            if node:
                res.append(str(node.val))
                q.append(node.left)
                q.append(node.right)
            else:
                res.append("null")
        return "["+",".join(res)+"]"

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        反序列化二叉树:字符串->二叉树
        :type data: str
        :rtype: TreeNode
        """
        # data是字符串,不能像下面这样写
        # if not data:
        #     return
        if data=="[]":
            return 
        vals, i = data[1:-1].split(','), 1
        root = TreeNode(int(vals[0]))
        q=deque([root])
        while q:
            node = q.popleft()
            if vals[i] != "null":
                node.left = TreeNode(int(vals[i]))
                q.append(node.left)
            i += 1
            if vals[i] != "null":
                node.right = TreeNode(int(vals[i]))
                q.append(node.right)
            i += 1
        return root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/605111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python】在Windows Server上部署Flask后端服务器

想要在Windows Server上部署flask应用&#xff0c;当然不能只下一个anaconda配完环境之后直接启动py文件&#xff0c;这样的话后台会有一段警告&#xff1a; * Serving Flask app app* Debug mode: off WARNING: This is a development server. Do not use it in a production …

【氮化镓】GaN功率器件在转换器设计中的挑战

I. 引言(INTRODUCTION) 宽带隙(WBG)器件的重要性: 引言部分首先强调了宽带隙(WBG)器件在高频、高效率电力电子技术中的关键作用。这些器件,包括碳化硅(SiC)和氮化镓(GaN),相较于传统的硅功率器件,具有显著的优势。宽带隙半导体材料的高击穿场强允许设计更薄的漂…

了解内存函数

✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 前言 内存函数不止malloc、calloc、realloc、free还有memcpy、memmove、memset、memcmp。前四个的头文件是<stdlib.h>,后四个的头文件是<strin…

HTML学习|网页基本信息、网页基本标签、图像标签、超链接标签、列表标签、表格标签、媒体元素、页面结构分析、iframe内联框架

网页基本信息 DOCTYPE是设置使用什么规范&#xff0c;网页整个信息都在html标签中&#xff0c;head标签里包含字符集设置&#xff0c;网页介绍等信息&#xff0c;title标签是网页的名称&#xff0c;网页的主干都在body标签中 网页基本标签 标题标签 h1~h6都是标题标签&#x…

【项目实战】使用Yolov8 + tesseract 实现身份证信息解析(OCR) + 输入可为图片或者pdf + 完整代码 + 整体方案 + 全网首发

本项目可用于实验,毕业设计参考等。整体效果如下所示: 说明:图片来源于网络,如有侵权,请联系作者删除。 目录 一 数据集制作

WPF之多种视图切换

1&#xff0c;View切换&#xff0c;效果呈现 视图1 视图2 视图3 2&#xff0c;在Xaml中添加Listview控件&#xff0c;Combobox控件。 <Grid ><Grid.RowDefinitions><RowDefinition Height"143*"/><RowDefinition Height"30"/>&l…

Ubuntu 下串口工具:Minicom、CuteCom 和 Screen

在 Ubuntu 中&#xff0c;对于串口通信工具的选择&#xff0c;虽然没有一个绝对的 “最好用” 的排名&#xff0c;但根据用户反馈和工具的流行程度&#xff0c;Minicom、CuteCom 和 Screen 这三个工具通常被认为是较为受欢迎和实用的。 一、简介&#xff1a; Minicom&#xff…

一款功能强大的网络安全综合工具-PotatoTool

一、 简介 这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功能选择。 二…

英语学习笔记6——What make is it?

What make is it? 它是什么牌子的&#xff1f; make n.&#xff08;产品的&#xff09;品牌名称    v. 制作 区别&#xff1a;model n.&#xff08;产品的&#xff09;型号       n. 模型       n. 模特 make 指的是大的品牌名称&#xff0c; model 是旗下产品…

Honor of Kings QQ 1537937510

司空震到底要不要物理伤害高呢&#xff1f;还是法术伤害高呢&#xff1f;要不要出魔女和制裁引发的血案 先看下司空震的说明&#xff1a; 说下这个伙计为啥加QQ来骂我&#xff0c;因为这场当然最终是赢了&#xff0c;比赛里他一直强调司空震是物理伤害改版问题&#xff0c;然后…

Whistle Web Debugging Proxy介绍及使用

大家好&#xff0c;今天继续给大家分享一款抓包工具&#xff0c;这款抓包工具是网页的形式&#xff0c;方便多人访问同时维护。Whistle Web Debugging Proxy是一个用于HTTP、HTTPS、WebSocket等网络协议的跨平台调试工具。它可以帮助开发者对网络请求进行捕捉、分析、修改和重定…

WPF/C#:ProgressBar的基本使用

前言 在日常开发过程中&#xff0c;如果遇到需要一段时间才能完成的任务&#xff0c;通常需要给用户一个进度条提示。今天给大家介绍的是WPF/C#中ProgressBar的基本使用。 ProgressBar的介绍 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;Pr…

Kafka应用Demo:多消费者实例按主题订阅消费消息,增强系统可靠性

环境搭建 在本地启动两个消费者进程&#xff0c;配置同的群组&#xff08;neo1&#xff09;, 订阅同一个主题消费消息。 生产者和消费者代码与《Kafka应用Demo&#xff1a;按主题订阅消费消息》相同。 测试步骤 生产者发送多个数字消息到kafka队列&#xff0c; 可以看到只有…

MouseBoost PRO mac中文激活版:专业鼠标助手

MouseBoost PRO mac鼠标性能优化软件&#xff0c;以其强大的功能和智能化的操作&#xff0c;助您轻松驾驭鼠标&#xff0c;提高工作效率。 MouseBoost PRO支持自定义快捷键设置&#xff0c;让您轻松实现快速切换应用程序、打开特定文件、调节音量大小等操作。自动识别窗口功能则…

运行npm install时报错“npm ERR! code 1”

目录 一、问题分析 二、解决问题 一、问题分析 有registry淘宝镜像地址过期的问题&#xff0c;改一下地址 npm淘宝镜像过期解决办法-CSDN博客主要问题是node-sass和sass-loader版本冲突 打开cmd&#xff0c;输入"node -v"查看node版本 我的版本是16&#xff0c;应…

java项目之智慧图书管理系统设计与实现(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的智慧图书管理系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 智慧图书管理…

elk + filebeat 8.4.3 收集nginx日志(docker部署)

ELK filebeat docker部署 一、 elasticsearch部署1、运行elasticsearch临时配置容器2、拷贝文件目录到本地3、检查elasticsearch.yml4、删除之前elastic&#xff0c;运行正式容器5、docker logs记录启动日志 二、部署kibana1、运行kibana临时配置容器2、docker拷贝配置文件到本…

Java 11 到 Java 8 的兼容性转换

Java 11 到 Java 8 的兼容性转换 欲倚绿窗伴卿卿&#xff0c;颇悔今生误道行。有心持钵丛林去&#xff0c;又负美人一片情。 静坐修观法眼开&#xff0c;祈求三宝降灵台&#xff0c;观中诸圣何曾见&#xff1f;不请情人却自来。 入山投谒得道僧&#xff0c;求教上师说因明。争奈…

HFSS学习-day3-HFSS的工作界面

工作界面也称为用户界面&#xff0c;是HFSS软件使用者的工作环境:了解、熟悉这个工作环境是掌握HFSS软件使用的第一步 HFSS工作环境介绍 1.HFSS工作界面简单的组成说明2.工作界面中各个工作窗口功能主菜单工具栏项目管理窗口属性窗口信息管理窗口进程窗口三维模型窗口 3.HFSS主…

【qt】动态属性(下)

动态属性目录 一.最简单的属性二.访问类的所有属性三.运行时添加属性&#xff08;动态属性&#xff09;★四.总结 一.最简单的属性 想要对一个数据成员进行读和写我们一般都会使用set或者get这种类型的自定义的函数去间接访问&#xff0c;且使用非常的频繁。 因此咱们有一个最…