算法訓練營day30 貪心算法④ 重疊問題 452. 用最少數量的箭引爆氣球、435. 無重疊區間 、 763.劃分字母區間

????????貪心算法的第四篇博客,主要是重疊問題的練習,思路都較為簡單,最后一題可能需要著重思考一下

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;?…