力扣面試150題--插入區間和用最少數量的箭引爆氣球

Day 28

題目描述

在這里插入圖片描述

思路

初次思路:借鑒一下昨天題解的思路,將插入的區間與區間數組作比較,插入到升序的數組中,其他的和(合并區間)做法一樣。
注意需要特殊處理一下情況,插入區間比數組中最后一個區間的起始點大,這種情況,在循環中不會計算到插入區間,單獨處理一下。

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> merged = new ArrayList<int[]>();if(intervals.length==0){//區間數組為空merged.add(new int[]{newInterval[0],newInterval[1]});return merged.toArray(new int[merged.size()][]);   }int start=0,end=0;for (int i = 0; i < intervals.length;i++) {if(newInterval[0]<intervals[i][0]) {//將插入區間到數組中start = newInterval[0];end = newInterval[1];newInterval[0] = intervals[i][0];newInterval[1] = intervals[i][1];i--;}else{start = intervals[i][0];end = intervals[i][1];}if(merged.size()==0||merged.get(merged.size()-1)[1]<start) {merged.add(new int[]{start, end});}else{merged.get((merged.size()-1))[1] = Math.max(merged.get(merged.size()-1)[1], end);}}if(newInterval[0]>=intervals[intervals.length-1][0]){//特殊處理一下if(merged.size()==0||merged.get(merged.size()-1)[1]<newInterval[0]) {merged.add(new int[]{newInterval[0], newInterval[1]});}else{merged.get((merged.size()-1))[1] = Math.max(merged.get(merged.size()-1)[1], newInterval[1]);}}return merged.toArray(new int[merged.size()][]);   }
}

問題:時間復雜度比較高,雖然通過了
做法:注意題目條件,給定的區間數組中的區間是不重疊的,那么我們需要插入一個新的區間,只需要找到這個與這個插入區間有重疊的區間,合并成一個大區間即可。

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> res = new ArrayList<int[]>();if(intervals.length==0){//數組為空特殊處理res.add(new int[]{newInterval[0],newInterval[1]});return res.toArray(new int[res.size()][]);}int x=0;int start =newInterval[0],end=newInterval[1];//初始化for (int i = 0; i < intervals.length; i++) {if(intervals[i][1] <newInterval[0]) {//說明這個區間和新插入區間沒有交集res.add(new int[]{intervals[i][0],intervals[i][1]});}else if(intervals[i][0] > newInterval[1]) {if(x==0){//由于數組是按照起始點的升序排列。證明插入的區間到這里已經找到最大的合并區間res.add(new int[]{start,end});x=1;}//說明這個區間和新插入區間沒有交集res.add(new int[]{intervals[i][0],intervals[i][1]});}else{//擴大合并區間start=Math.min(start,intervals[i][0]);end=Math.max(end,intervals[i][1]);}}if(x==0){//排除特殊情況,即為數組中所有區間在插入這個區間后合并為一個大區間res.add(new int[]{start,end});}return res.toArray(new int[res.size()][]);}
}

題目描述

在這里插入圖片描述

思路

首先我們來中翻中一下:這題所謂的最少數量的箭,可以理解為多個區間中的重疊的區間,所以這道題的目的是為了找到這個區間數組有幾個重疊區間。
做法

  1. 將所有氣球按照起始點升序進行排序
  2. 創建start和end,用來記錄當前重合區間的范圍(初始設置為第一個氣球的范圍),初始設置箭數sum為1。
  3. 從前向后遍歷,由于此時氣球是有序的,比較當前氣球和重合范圍(start,end)是否重合,也就是比較當前氣球的起始點是否小于等于end(不比較start的原因在于是升序的,下一個氣球的起始點一定比start大
  4. 如果小于等于end,說明氣球在重合區間,需要更新重合區間(這里建議畫圖理解),更新看代碼。
  5. 如果大于end,說明這個氣球和之前的所有氣球不能一箭射穿,就將箭數加1
    注意:箭初始設置為1,目的就是將與第一個氣球有重合區間的所有氣球都射穿,如果一個氣球不在重合區間,就需要多一把箭。
class Solution {public int findMinArrowShots(int[][] points) {if(points.length==0){//為空特殊處理return  0;}int start=0,end=0,sum=1;Arrays.sort(points, new Comparator<int[]>() {//按照起始點進行升序排序public int compare(int[] interval1, int[] interval2) {return Integer.compare(interval1[0], interval2[0]);}});//排序start=points[0][0];end=points[0][1];for(int i=1;i<points.length;i++){if(points[i][0]<=end){//如果該區間的起始點比目前記錄的區間結束點還小,說明有重合start=Math.max(start,points[i][0]);//修改區間的起始點end=Math.min(end,points[i][1]);//修改區間的結束點//這里就是收縮到目前的最小重合區間}else{//說明這個氣球不在之前的重合區間,一箭射不爆sum++;//計數器加1 start=points[i][0];end=points[i][1];//將這個氣球的范圍作為新的區間}}return sum;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77796.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77796.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77796.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Java面試筆記:基礎】4.強引用、軟引用、弱引用、幻象引用有什么區別?

1. 引用類型及其特點 強引用(Strong Reference): 定義:最常見的引用類型,通過new關鍵字直接創建。回收條件:只要強引用存在,對象不會被GC回收。示例:Object obj = new Object(); // 強引用特點: 強引用是導致內存泄漏的常見原因(如未及時置為null)。手動斷開引用:…

ycsb性能測試的優缺點

YCSB&#xff08;Yahoo Cloud Serving Benchmark&#xff09;是一個開源的性能測試框架&#xff0c;用于評估分布式系統的讀寫性能。它具有以下優點和缺點&#xff1a; 優點&#xff1a; 簡單易用&#xff1a;YCSB提供了簡單的API和配置文件&#xff0c;使得性能測試非常容易…

基于SpringBoot的校園賽事直播管理系統-項目分享

基于SpringBoot的校園賽事直播管理系統-項目分享 項目介紹項目摘要管理員功能圖用戶功能圖項目預覽首頁總覽個人中心禮物管理主播管理 最后 項目介紹 使用者&#xff1a;管理員、用戶 開發技術&#xff1a;MySQLJavaSpringBootVue 項目摘要 隨著互聯網和移動技術的持續進步&…

Nginx?中間件的解析

目錄 一、Nginx的核心架構解析 二、Nginx的典型應用場景 三、Nginx的配置優化實踐 四、Nginx的常見缺陷與漏洞 一、Nginx的核心架構解析 ??事件驅動與非阻塞IO模型?? Nginx采用基于epoll/kq等系統調用的事件驅動機制&#xff0c;通過異步非阻塞方式處理請求&#xff0c;…

杭州小紅書代運營公司-品融電商:全域增長策略的實踐者

杭州小紅書代運營公司-品融電商&#xff1a;全域增長策略的實踐者 在品牌競爭日趨激烈的電商領域&#xff0c;杭州品融電商作為一家專注于品牌化全域運營的服務商&#xff0c;憑借其“效品合一”方法論與行業領先的小紅書代運營能力&#xff0c;已成為眾多品牌實現市場突圍的重…

【映客直播-注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被黑客攻擊&#xff0c;存在如下安全問題&#xff1a; 暴力破解密碼&#xff0c;造成用戶信息泄露短信盜刷的安全問題&#xff0c;影響業務及導致用戶投訴帶來經濟損失&#xff0c;尤其是后付費客戶&#xff0c;風險巨大&#xff0c;造成虧損無底洞…

Android audio_policy_configuration.xml加載流程

目錄 一、audio_policy_configuration.xml文件被加載流程 1、AudioPolicyService 創建階段 2、createAudioPolicyManager 實現 3、AudioPolicyManager 構造 4、配置文件解析 loadConfig 5、核心解析邏輯 PolicySerializer::deserialize 二、AudioPolicyConfig類解析 1、…

使用 Docker 安裝 Elastic Stack 并重置本地密碼

Elastic Stack&#xff08;也被稱為 ELK Stack&#xff09;是一個非常強大的工具套件&#xff0c;用于實時搜索、分析和可視化大量數據。Elastic Stack 包括 Elasticsearch、Logstash、Kibana 等組件。本文將展示如何使用 Docker 安裝 Elasticsearch 并重置本地用戶密碼。 ###…

Unitest和pytest使用方法

unittest 是 Python 自帶的單元測試框架&#xff0c;用于編寫和運行可重復的測試用例。它的核心思想是通過斷言&#xff08;assertions&#xff09;驗證代碼的行為是否符合預期。以下是 unittest 的基本使用方法&#xff1a; 1. 基本結構 1.1 創建測試類 繼承 unittest.TestC…

git 版本提交規范

Git 提交規范&#xff08;Git Commit Message Convention&#xff09;是為了讓項目的提交歷史更加清晰、可讀、便于追蹤和自動化工具解析。常見的規范之一是 Conventional Commits&#xff0c;下面是一個推薦的格式規范&#xff1a; &#x1f31f; 提交信息格式&#xff08;Con…

stat判斷路徑

int stat(const char *pathname, struct stat *buf); pathname&#xff1a;用于指定一個需要查看屬性的文件路徑。 buf&#xff1a;struct stat 類型指針&#xff0c;用于指向一個 struct stat 結構體變量。調用 stat 函數的時候需要傳入一個 struct stat 變量的指針&#xff0…

學習Docker遇到的問題

目錄 1、拉取hello-world鏡像報錯 1. 檢查網絡連接 排查: 2. 配置 Docker 鏡像加速器(推薦) 具體解決步驟: 1.在服務器上創建并修改配置文件,添加Docker鏡像加速器地址: 2. 重啟Docker 3. 拉取hello-world鏡像 2、刪除鏡像出現異常 3、 容器內部不能運行ping命令 …

安寶特案例 | AR如何大幅提升IC封裝廠檢測效率?

前言&#xff1a;如何提升IC封裝廠檢測效率&#xff1f; 在現代電子產品的制造過程中&#xff0c;IC封裝作為核心環節&#xff0c;涉及到復雜處理流程和嚴格質量檢測。這是一家專注于IC封裝的廠商&#xff0c;負責將來自IC制造商的晶圓進行保護、散熱和導通處理。整個制程繁瑣…

【Linux網絡與網絡編程】07.應用層協議HTTPS

HTTP 協議內容都是按照文本的方式明文傳輸的&#xff0c;這就導致在傳輸過程中出現一些被篡改的情況。HTTPS 就是在 HTTP 協議的基礎上引入了一個加密層的應用層協議。 1. 基礎概念 1.1 加密與解密 加密就是把明文&#xff08;要傳輸的信息&#xff09;進行一系列變換&#x…

【k8s】PV,PVC的回收策略——return、recycle、delete

PV 和 PVC 的回收策略主要用于管理存儲資源的生命周期&#xff0c;特別是當 PVC 被刪除時&#xff0c;PV 的處理方式。回收策略決定了 PV 在 PVC 被刪除后的行為。 回收策略的類型 Kubernetes 提供了三種主要的回收策略&#xff0c;用于管理 PV 的生命周期&#xff1a; Reta…

2023藍帽杯初賽內存取證-2

直接使用mimikatz插件來獲取用戶密碼&#xff1a; vol.py --plugin/opt/volatility/plugins -f memdump.mem --profile Win7SP1x64 mimikatz 答案&#xff1a;3w.qax.com

使用dompurify修復XSS跨站腳本缺陷

1. 問題描述 漏洞掃描說有一個低危漏洞&#xff0c;容易被跨站腳本攻擊XSS。 2. 使用dompurify修復 DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. 簡單來說&#xff0c;我們可以使用 dompurify 處理xss跨站腳本攻擊。 2.…

【c語言】指針和數組筆試題解析

一維數組: //數組名a如果既不單獨放在sizeof()中&#xff0c;也不與&結合&#xff0c;那么就表示數組首元素的大小 //a一般表示數組首元素地址&#xff0c;只有兩種情況表示整個數組&#xff0c;sizeof(arr)表示整個數組的大小&#xff0c;&arr表示數組的地址 int a[]…

機器人進階---視覺算法(六)傅里葉變換在圖像處理中怎么用

傅里葉變換在圖像處理中怎么用 傅里葉變換的基本原理應用場景Python代碼示例逐行解釋總結傅里葉變換在圖像處理中是一種重要的工具,它將圖像從空間域轉換到頻域,從而可以對圖像的頻率特性進行分析和處理。傅里葉變換在圖像濾波、圖像增強、圖像壓縮和圖像分析等方面都有廣泛應…

深度學習與總結JVM專輯(七):垃圾回收器—CMS(圖文+代碼)

CMS垃圾收集器深度解析教程 1. 前言&#xff1a;為什么需要CMS&#xff1f;2. CMS 工作原理&#xff1a;一場與時間的賽跑2.1. 初始標記&#xff08;Initial Mark&#xff09;2.2. 并發標記&#xff08;Concurrent Mark&#xff09;2.3. 重新標記&#xff08;Remark&#xff09…