贪心算法的第四篇博客,主要是重叠问题的练习,思路都较为简单,最后一题可能需要着重思考一下

452. 用最少数量的箭引爆气球

        遍历数组,如果存在重叠则减少一支箭(不重叠则增加一支箭)

        重叠的判定:基于累积的最小重叠区间

class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if len(points) == 0: return 0points.sort(key=lambda x: x[0]) # 默认升序result = 1for i in range(1, len(points)):if points[i][0] > points[i - 1][1]: # 气球i和气球i-1不挨着,注意这里不是>=result += 1     else:points[i][1] = min(points[i - 1][1], points[i][1]) # 更新重叠气球最小右边界return result

435. 无重叠区间 

注:图片引用自《代码随想录》

        右排序,遍历左端点,小于则删除(左排序相同思路)

class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if not intervals:return 0intervals.sort(key=lambda x: x[0])  # 按照左边界升序排序count = 0  # 记录重叠区间数量for i in range(1, len(intervals)):if intervals[i][0] < intervals[i - 1][1]:  # 存在重叠区间intervals[i][1] = min(intervals[i - 1][1], intervals[i][1])  # 更新重叠区间的右边界count += 1return count

763.划分字母区间

贪心思路:

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

注:图片引用自《代码随想录》

class Solution:def partitionLabels(self, s: str) -> List[int]:last_occurrence = {}  # 存储每个字符最后出现的位置for i, ch in enumerate(s): # 遍历可迭代对象, 生成索引和值last_occurrence[ch] = i # 重点理解写法result = []start = 0end = 0for i, ch in enumerate(s):end = max(end, last_occurrence[ch])  # 找到当前字符出现的最远位置if i == end:  # 如果当前位置是最远位置,表示可以分割出一个区间result.append(end - start + 1)start = i + 1return result

按照上面两题思路仿写

class Solution:def countLabels(self, s):# 初始化一个长度为26的区间列表,初始值为负无穷hash = [[float('-inf'), float('-inf')] for _ in range(26)]hash_filter = []for i in range(len(s)):if hash[ord(s[i]) - ord('a')][0] == float('-inf'):hash[ord(s[i]) - ord('a')][0] = ihash[ord(s[i]) - ord('a')][1] = i # 记录每一个元素的起始位置和结束位置for i in range(len(hash)):if hash[i][0] != float('-inf'):hash_filter.append(hash[i]) # 按照字母顺序拼接, 刨除空元素return hash_filterdef partitionLabels(self, s):res = []hash = self.countLabels(s)hash.sort(key=lambda x: x[0])  # 按左边界从小到大排序rightBoard = hash[0][1]  # 记录最大右边界leftBoard = 0for i in range(1, len(hash)):if hash[i][0] > rightBoard:  # 出现分割点(出现新元素左边界大于现存的最大右边界)res.append(rightBoard - leftBoard + 1)leftBoard = hash[i][0]rightBoard = max(rightBoard, hash[i][1]) # 最大右边界res.append(rightBoard - leftBoard + 1)  # 最右端return res

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gradio, Streamlit, Dash:AI应用开发的效率之选

在人工智能时代&#xff0c;如何快速将模型原型转化为交互式应用&#xff0c;是许多开发者面临的挑战。Gradio、Streamlit 和 Dash 作为流行的Python框架&#xff0c;各自以其独特的优势&#xff0c;帮助我们高效地构建AI应用界面。本文将深入对比这三大框架的优缺点、适用场景…

数学基础弱能学好大数据技术吗?

很多同学刚进入大学&#xff0c;一听到“大数据”“数据分析”这些词&#xff0c;就觉得必须得是数学大佬才能玩得转。高数线代概率论&#xff0c;光听名字就头大&#xff0c;更别说那些复杂的公式和推导了。但事实真的是这样吗&#xff1f;数学不好&#xff0c;就不能学大数据…

子进程信号处理

SIGCHLD 信号详解‌‌一、信号定义与作用‌‌SIGCHLD‌ 是 UNIX/Linux 系统中由内核向父进程发送的信号&#xff0c;用于通知子进程的状态变化&#xff08;如终止、停止或恢复&#xff09;‌。其主要作用包括&#xff1a;‌回收子进程资源‌&#xff1a;避免子进程终止后成为僵…

WPF 项目设置应用程序图标和设置程序集图标

在 WPF 项目中更改生成的可执行文件&#xff08;.exe&#xff09;图标需要完成两个关键步骤&#xff1a;设置应用程序图标和设置程序集图标。以下是详细操作指南&#xff1a; 第一步&#xff1a;准备图标文件 准备一个 .ico 格式的图标文件&#xff08;必须使用 ICO 格式&…

JMeter压测黑马点评优惠券秒杀的配置及请求爆红问题的解决(详细图解)

目录 一、前言 二、优惠券秒杀压测配置 三、已配置token但是请求全部爆红的问题 四、配置JSON断言后的效果 一、前言 在学习黑马点评优惠券秒杀功能的压力测试时&#xff0c;由于老师没有任何引导而是直接开始测试&#xff0c;所以本博客记录一下JMeter压测黑马点评优惠券秒…

Nginx 运维实战: 什么是反向代理,如何配置?

在互联网的庞大架构中&#xff0c;Nginx 作为一款高性能的 Web 服务器和反向代理服务器&#xff0c;发挥着至关重要的作用。其中&#xff0c;反向代理功能更是 Nginx 被广泛应用的核心原因之一。本文将深入探讨什么是反向代理&#xff0c;以及如何在 Nginx 中进行反向代理的配置…

短视第三套多功能主题3.0二开模板苹果CMS插件重构版

这款短视第三套多功能主题二开模板苹果CMS插件重构版源码&#xff0c;基于市面上现有的二开版本进行的重制修正更新。目前已经完美适配新版 4049 以上的苹果Cms系统&#xff0c;无需担心因系统版本问题导致的不兼容情况。​主题插件重构后支持一键启动插件自动安装模板&#xf…

详解力扣高频SQL50题之1148. 文章浏览 I【入门】

传送门&#xff1a;1148. 文章浏览 I 题目 Views 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | article_id | int | | author_id | int | | viewer_id | int | | view_date | date | ---------------------- 此表可能会存在重复…

内外网互传文件 安全、可控、便捷的跨网数据交换

内外网互传文件 安全、可控、便捷的跨网数据交换破解企业数字化痛点&#xff0c;重新定义文件传输标准在数字化转型浪潮中&#xff0c;企业面临着前所未有的挑战&#xff1a;内网系统需要严密防护&#xff0c;外网协作又要高效便民。如何在网络安全与业务效率之间找到完美平衡&…

性能监控装饰器-python

看项目时&#xff0c;发现一个性能监控装饰器&#xff0c;感觉挺有意思的。于是借鉴了他的思路&#xff0c;自己重新写了我认为更简洁的代码。作用&#xff1a;可以放在类上和方法上&#xff0c;如果放在类上&#xff0c;则监控所有方法。根据设置的阈值&#xff0c;判断方法执…

qt常用控件-05

文章目录qt常用控件-05LineEditTextEditcombo box结语很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 今天我们进一步c11中常见的新增表达 作者&#xff1a;٩( ‘ω’ )و260 我的专栏&#xff1a;qt&am…

Python进阶知识之pandas库

目录 一、Series&#xff1a;一维带标签的数组 二、DataFrame&#xff1a;二维表格型数据结构 三、Series 的核心操作 四、 DataFrame 的核心操作 五、 索引的特殊用法 六、 loc 与 iloc&#xff1a;DataFrame 的高级查询 七、综合案例 一、Series&#xff1a;一维带标签…

【GIT】基础知识及基本应用

很高兴为您详细介绍Git的相关知识。Git是一个分布式版本控制系统&#xff0c;常用于软件开发中的代码管理和协作。以下是关于Git的一些基础知识&#xff1a;1. 安装和配置安装&#xff1a;Windows&#xff1a;可以从GitHub下载适用于Windows的安装包。MacOS&#xff1a;可以通过…

Maven Scope标签:解锁Java项目依赖管理的秘密武器

一、Maven 与依赖管理简介在 Java 项目开发的庞大体系中&#xff0c;Maven 堪称基石般的存在&#xff0c;发挥着极为关键的作用。它遵循 “约定优于配置” 的理念&#xff0c;让项目的构建过程变得规范有序、结构化且具备良好的重复性 。比如&#xff0c;它强制执行标准的项目结…

IP43半加固笔记本L156H

IP43半加固笔记本L156H 产品特性&#xff1a;● 标配Intel I7-7700HQ 4核8线程处理器 ● 操作系统支持Windows7/10 64bit / Li n u x ● DDR4 16G 高速内存 zui高支持64G ● 全高清显示面板15.6寸&#xff0c;1920X1080 ● 内置海德射频模块SMA接口 ● 工作温度&#xff1a;…

ZooKeeper 是什么?

ZooKeeper 是一个分布式协调服务&#xff0c;由 Apache 基金会开发&#xff0c;专为分布式系统设计。它提供了高可用、高性能、一致性的核心服务&#xff0c;帮助分布式应用解决诸如配置管理、命名服务、分布式锁、集群协调等问题。ZooKeeper 的核心特点&#xff1a;简单易用&a…

Java学习第六十三部分——K8s

目录 &#x1f4eb; 一、关键概述 &#x1f50d; ​​二、定义起源​​ &#x1f680; ​​三、核心特点​​ &#x1f3d7;️ ​​四、核心组件​​ &#x1f9e9; ​​五、资源对象​​ ⚡ ​​六、应用场景​​ &#x1f9f1; ​​七、Java与K8s &#x1f6e0;️ ​…

【自用】JavaSE--阶段测试

考试题目第一题&#xff08;10分&#xff09;需求目前有100名囚犯&#xff0c;每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号&#xff08;要求这些囚犯的编号是不能重复的&#xff09;&#xff0c;然后让他们依次站成一排。(注&#xff1a;位置是从…

Vulnhub Matrix-Breakout-2-Morpheus靶机攻略

1.下载靶机 靶机下载地址&#xff1a;https://download.vulnhub.com/matrix-breakout/matrix-breakout-2-morpheus.ova 下载后使用VM打开&#xff0c;后续选择安装地址开启就算是下载好了 2.主机发现 查看网络适配器模式&#xff08;NET模式&#xff09;&#xff0c;找到NET…

OpenCV —— 绘制图形

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…