力扣刷题总结一:模拟+哈希表+双指针+前缀和+滑动窗口

news2024/9/24 15:23:25

模拟

根据题目意思,捋清整个流程,使用代码去模拟整个流程

例题

种花问题
在这里插入图片描述

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        # 模拟,在数组前后各添加1个0,从第1个元素到倒数第2个元素,判断元素是否为0且左右都为0则可插入
        flowerbed.insert(0,0)
        flowerbed.append(0)
        res=0
        for i in range(1,len(flowerbed)-1):
            if flowerbed[i]==0 and flowerbed[i-1]==0 and flowerbed[i+1]==0:
                res+=1
                flowerbed[i]=1
        return res>=n

哈希表

用于存储键值对的数据结构,Python的“字典”数据类型就是基于哈希表实现的。

作用:以空间换时间,快速判断一个元素是否出现在集合中

例题

K 和数对的最大数目
在这里插入图片描述

class Solution:
    def maxOperations(self, nums: List[int], k: int) -> int:
        # 使用字典统计每个数字的个数,配对成功则个数-1
        dt={}
        for i in nums:
            if i in dt:
                dt[i]+=1
            else:
                dt[i]=1
        res=0
        for i in nums:
            if dt[i]!=0:
                dt[i]-=1
                if dt.get(k-i,0)!=0:
                    res+=1
                    dt[k-i]-=1
        return res

双指针解法

class Solution:
    def maxOperations(self, nums: List[int], k: int) -> int:
        # 排序+双指针
        nums.sort()
        res=0
        l=0
        r=len(nums)-1
        while l<r:
            if nums[l]+nums[r]==k:
                res+=1
                l+=1
                r-=1
            elif nums[l]+nums[r]>k:
                r-=1
            else:
                l+=1
        return res

前缀和

数组前n个数之和

作用:求区间和

维护前缀和数组

nums=range(100)  # 需要求区间和的数组
n=len(nums)
preSum=[0]*(n+1)  # 初始化长度为n+1的前缀和数组
for i in nums:
	preSum[i+1]=preSum[i]+nums[i]  # 维护前缀和数组

例题

子数组最大平均数 I
在这里插入图片描述

class Solution:
    def findMaxAverage(self, nums: List[int], k: int) -> float:
        # 前缀和数组
        n=len(nums)
        if n==k:
            return sum(nums)/k
        preSum=[0]*(n+1)
        for i in range(n):
            preSum[i+1]=preSum[i]+nums[i]
        
        l=0
        res=float("-inf")
        for i in range(n-k+1):
            res=max(preSum[i+k]-preSum[i],res)
        return res/k

滑动窗口

滑动窗口,顾名思义,窗口大小可以不固定,使用左右指针,作为窗口的左右边界。

滑动窗口模板

def findSubArray(nums):
    N = len(nums) # 数组/字符串长度
    left, right = 0, 0 # 双指针,表示当前遍历的区间[left, right],闭区间
    sums = 0 # 用于统计 子数组/子区间 是否有效,根据题目可能会改成求和/计数
    res = 0 # 保存最大的满足题目要求的 子数组/子串 长度
    while right < N: # 当右边的指针没有搜索到 数组/字符串 的结尾
        sums += nums[right] # 增加当前右边指针的数字/字符的求和/计数
        while 区间[left, right]不符合题意: # 此时需要一直移动左指针,直至找到一个符合题意的区间
            sums -= nums[left] # 移动左指针前需要从counter中减少left位置字符的求和/计数
            left += 1 # 真正的移动左指针,注意不能跟上面一行代码写反
        # 到 while 结束时,我们找到了一个符合题意要求的 子数组/子串
        res = max(res, right - left + 1) # 需要更新结果
        right += 1 # 移动右指针,去探索新的区间
    return res

例题

最大连续1的个数 III
在这里插入图片描述

class Solution:
    def longestOnes(self, nums: List[int], k: int) -> int:
        # 滑动窗口
        n=len(nums)
        if n-sum(nums)<=k:  # 数组中0的总个数不大于容忍数,则可全部反转
            return n

        res=0
        l,r=0,0
        zeros=0  # 统计lr区间0的个数
        while r<n:
            if nums[r]==0:
                zeros+=1  # 区间中出现0,计数加1
            while zeros>k:  # 当区间中0的个数超过能容忍的反转数
                if nums[l]==0:  #如果左端点的值为0,则左端点右移,区间0的个数减1
                    zeros-=1
                l+=1  # 左端点右移
            res=max(res,r-l+1)
            r+=1  # 右端点右移
        return res

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMake输出编译时间信息

使用CMake进行编译的代码&#xff0c;有时候会希望获得当前代码编译的时间信息&#xff0c;使用CMake提供的函数和宏等功能可以实现这个功能&#xff0c;下面是实现这个功能的一段代码 原文链接&#xff1a; CMake输出编译时间信息

YOLOV7改进-最新的可变形卷积V3

DCNv3 1、先编译这个文件,放到models文件夹下,再编译 2、编译命令 3、复制到common文件最后 4、源文件用的是LN,由于这里用的都是LN,所以也改了 5、原文也是没接激活函数的,但是按照yolo格式来说,会接一个 6、不加激活函数就把act去掉 7、DCNv3只在gpu上运行,所以下…

记一次时间序列算法的自回归预测--ARAutoreg

背景 最近公司给客户要做一些数据的预测&#xff0c;但是客户不清楚哪些做起来比较符合他们的&#xff0c;于是在经过与业务方的沟通&#xff0c;瞄准了两个方面的数据 1.工程数据&#xff1a;对工程数据做评估&#xff0c;然后做预警&#xff0c;这个想法是好的&#xff0c;…

java 咖啡餐厅管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 咖啡餐厅管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

【2023最新版】DataGrip使用MySQL教程

目录 一、安装MySQL 二、安装DataGrip 三、DataGrip使用MySQL 1. 新建项目 2. DataGrip连接MySQL 下载驱动文件 填写root密码 测试 成功 3. DataGrip操作MySQL 四、MySQL常用命令 1. 登录 2. 帮助 3. 查询所有数据库 一、安装MySQL MySQL是一种开源的关系型数据库…

java: 读取snakeyaml-1.26.jar各种jar包时出错; error in opening zip file

可能的问题 jar有问题idea没有权限等等其他问题。但执行后报错就是读取不了&#xff0c;还报error in opening zip file这个错。 解决问题 我的错就是jar包有问题。我先后进行了很多次把jar包位置里的东西全部删除&#xff0c;然后重新maven下载但是不管用。最后从网站上下载…

Kotlin委托Delegate托管by

Kotlin委托Delegate托管by import kotlin.reflect.KPropertyfun main() {var user: String by MyDelegate()user "fly"println(user) }class MyDelegate {private var v: String? nulloperator fun getValue(thisRef: Any?, property: KProperty<*>): Stri…

基于SSM的实验室耗材管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

解决方案 | 电子签让公共事业服务更便捷

为深入贯彻落实国务院关于深化“放管服”改革的号召&#xff0c;各地政府纷纷出台创新举措&#xff0c;优化营商环境&#xff0c;将公共事业服务纳入“一网通办”的范畴。 政策助力&#xff0c; 让公共事业服务实现“足不出户”线上办 上海&#xff1a;上海市大数据中心与国网…

Discourse 的无效附件清理

Discourse 对上传的附件会进行清理&#xff0c;对于一些没有任何被引用的附件&#xff0c;Discourse 会认为是垃圾而清理掉。 原因应该是为了降低存储空间的使用&#xff0c;但是我们目前使用的是 S3 &#xff0c;所以对存储空间并没有太多的要求。 根据官方的说法&#xff0…

SpringBoot配置优先级和Bean管理

SpringBoot配置优先级和Bean管理 1&#xff09;SpringBoot配置优先级2&#xff09;Bean管理【1】获取bean【2】bean作用域【3】第三方bean 1&#xff09;SpringBoot配置优先级 优先级(低>高) application.yaml(忽略)application.ymlapplication.propertiesjava系统属性(-Dxx…

LeetCode(力扣)78. 子集Python

LeetCode78. 子集 题目链接代码 题目链接 https://leetcode.cn/problems/subsets/description/ 代码 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:result []self.backtracking(nums, result, 0, [])return resultdef backtracking(self, nu…

容器编排学习(一)k8s集群管理

一 Kubernetes 1 概述 就在Docker容器技术被炒得热火朝天之时&#xff0c;大家发现&#xff0c;如果想要将Docker应用于具体的业务实现&#xff0c;是存在困难的一一编排、管理和调度等各个方面&#xff0c;都不容易。于是&#xff0c;人们迫切需要一套管理系统&#xff0…

MIT 6.S081学习笔记(第〇章)

〇、前言 本文涉及 xv6 《第零章 操作系统接口》相关&#xff0c;主要对涉及的进程、I/O、文件描述符、管道、文件等内容产生个人理解&#xff0c;不具有官方权威解释&#xff1b;文章的目录与书中的目录没有严格的相关性&#xff1b;文中会有问题 (Question) 字段&#xff0c…

uniapp里textarea多行文本输入限制数量

uniapp里textarea多行文本域实现输入计数 <template><view class"inputs"><textarea class"text1" maxlength50 placeholder请输入... input"sumfontnum"></textarea><text class"text2">{{fontNum}}/…

软件设计模式(三):责任链模式

前言 前面荔枝梳理了有关单例模式、策略模式的相关知识&#xff0c;这篇文章荔枝将沿用之前的写法根据示例demo来体会这种责任链设计模式&#xff0c;希望对有需要的小伙伴有帮助吧哈哈哈哈哈哈~~~ 文章目录 前言 责任链模式 1 简单场景 2 责任链模式理解 3 Java下servl…

【OJ比赛日历】快周末了,不来一场比赛吗? #09.09-09.15 #15场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-09-09&#xff08;周六&#xff09; #5场比赛2023-09-10…

Kafka3.0.0版本——消费者(独立消费者消费某一个主题中某个分区数据案例__订阅分区)

目录 一、独立消费者消费某一个主题中某个分区数据案例1.1、案例需求1.2、案例代码1.3、测试 一、独立消费者消费某一个主题中某个分区数据案例 1.1、案例需求 创建一个独立消费者&#xff0c;消费firstTopic主题 0 号分区的数据&#xff0c;所下图所示&#xff1a; 1.2、案…

【逗老师的无线电】MMDVM盒子安装高颜值仪表盘

目录 开篇、高颜值仪表盘展示1、实时通联卡片2、精简信息仪表盘3、主仪表盘 一、下载W0CHP-PiStar-Dash二、安装1、解压2、刻录SD卡 三、基础配置1、首次启动2、初始化配置2.1、先配置联网2.2、配置热点参数2.3、配置DMR参数2.4、显示屏配置 3、通联测试 四、进阶操作1、自定义…

Unity——脚本与导航系统(上)

Unity内置了一个比较完善的导航系统&#xff0c;一般称为Nav Mesh&#xff08;导航网格&#xff09;&#xff0c;用它可以满足大多数游戏中角色自动导航的需求。 一、导航系统相关组件 Unity的导航系统由以下几个部分组成&#xff1a; Nav Mesh。Nav Mesh与具体的场景关联&…