力扣150題-- 匯總區間和合并區間

Day 27

題目描述

在這里插入圖片描述

思路

做法

  1. 特殊處理空數組和數組只有一個元素的情況
  2. 設置beg,end標記范圍的起始和結束,x用來比較元素是否有序(初始end和beg都指向nums[0[,x為nums[0]+1)
  3. 遍歷數組
  4. 如果當前元素等于x,說明他和上一個元素是有序的,x++,并且將end指向它
  5. 如果當前元素不是x,說明該元素與前一個元素不有序,處理
  6. 如果此時end==beg,說明只有一個元素有序,直接加入結果集合
  7. 如果beg!=end說明,存在起始和結束點,組合成規定形式,加入結果集合
  8. 清空字符串修改beg,end都指向當前元素,x=當前元素值加1
  9. 遍歷到最后一個元素需要特殊處理(原因在于最后一個元素如果與前一個有序,會直接結束循環,不有序也只是指向了它并沒有加入結果集)
class Solution {public List<String> summaryRanges(int[] nums) {ArrayList<String> list = new ArrayList<>();String s="";if(nums.length == 0) return list;if(nums.length == 1) list.add(String.valueOf(nums[0]));int beg=nums[0],end=nums[0],x=beg+1;StringBuilder sb = new StringBuilder(s);for (int i = 1; i < nums.length; i++) {if(x==nums[i]){x++;end=nums[i];}else {if(end==beg){sb.append(end);list.add(sb.toString());}else{sb.append(beg+"->"+end);list.add(sb.toString());}sb.delete(0,sb.length());beg=end=nums[i];x=beg+1;}if(i==nums.length-1){if(beg==nums[i]){sb.append(end);list.add(sb.toString());}else{list.add(beg+"->"+nums[i]);}}}return list;}
}

題目描述

在這里插入圖片描述

思路

初次做法:對于兩個范圍是否能夠合并,有以下幾種情況用范圍(a,b)和(a1,b1)表示

  • a a1 b1 b
  • a1 a b b1
  • a a1 b b1
  • a1 a b1 b
  • a1 b1 a b (b1==a)
  • a b a1 b (b==a1)
    我的做法是從前向后遍歷,處理每個元素與其之后的元素進行合并,將合并結果存放在后面的元素中,如果哪次循環沒有完成合并,說明取得的就是最大合并區間 ,取出來存放。
class Solution {public int[][] merge(int[][] intervals) {int[]beg=new int[intervals.length];int[]end=new int[intervals.length];int sum=0;int x=0;for (int i = 0; i < intervals.length; i++) {beg[sum] = intervals[i][0];end[sum] = intervals[i][1];x=0;for (int j = i + 1; j < intervals.length; j++) {if( (beg[sum]<=intervals[j][0]&&end[sum]>=intervals[j][0]&&end[sum]<=intervals[j][1])||(beg[sum]>=intervals[j][0]&&end[sum]<=intervals[j][1])||(beg[sum]<=intervals[j][0]&&end[sum]>=intervals[j][1]&&beg[sum]>=intervals[j][0])||(beg[sum]<=intervals[j][0]&&end[sum]>=intervals[j][1])||(beg[sum]>=intervals[j][0]&&end[sum]>=intervals[j][1]&&beg[sum]<=intervals[j][1])) {x=1;intervals[j][0]=Math.min(beg[sum],intervals[j][0]);intervals[j][1]=Math.max(end[sum],intervals[j][1]);}}if(x==0){sum++;}}int[][] result=new int[sum][2];for (int i = 0; i < sum; i++) {result[i][0] = beg[i];result[i][1] = end[i];}return result;}
}

題解做法:按照區間的左端點排序,那么在排完序的列表中,可以合并的區間一定是連續的。如果當前區間的左端點在數組 merged 中最后一個區間的右端點之后,那么它們不會重合,我們可以直接將這個區間加入數組 merged 的末尾;否則,它們重合,我們需要用當前區間的右端點更新數組 merged 中最后一個區間的右端點,將其置為二者的較大值。

class Solution {public int[][] merge(int[][] intervals) {if (intervals.length == 0) {return new int[0][2];}Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] interval1, int[] interval2) {return interval1[0] - interval2[0];}});List<int[]> merged = new ArrayList<int[]>();for (int i = 0; i < intervals.length; ++i) {int L = intervals[i][0], R = intervals[i][1];if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) {merged.add(new int[]{L, R});} else {merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);}}return merged.toArray(new int[merged.size()][]);}
}

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

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

相關文章

【c++深入系列】:萬字string詳解(附有sso優化版本的string模擬實現源碼)

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 當你想放棄時&#xff0c;想想為什么當初堅持走到了這里 ★★★ 本文前置知識&#xff1a; 類和對象&#xff08;上&#xff09; 類和對…

Spark-Streaming簡介和核心編程

Spark-Streaming簡介 概述&#xff1a;用于流式數據處理&#xff0c;支持Kafka、Flume等多種數據輸入源&#xff0c;可使用Spark原語運算&#xff0c;結果能保存到HDFS、數據庫等。它以DStream&#xff08;離散化流&#xff09;為抽象表示&#xff0c;是RDD在實時場景的封裝&am…

verilog中的約束信息

1、保持約束 keep&#xff1a;當編譯器在對FPGA設計進行映射時&#xff0c;一些線網將會被吸收到邏輯塊中。 (* KEEP "{TRUE | FALSE}" *) keep_hierarchy:vivado默認會把設計變成一級一級模塊化的調用轉換為一個沒有子模塊的超大模塊。這個約束會保留部分層級關系…

Missashe考研日記-day24

Missashe考研日記-day24 1 專業課408 學習時間&#xff1a;2h30min學習內容&#xff1a; 今天把剩下的兩個經典同步問題和管程部分的課看了&#xff0c;然后做課后習題。這部分的重點在PV大題&#xff0c;很多很經典&#xff0c;不過第一輪不打算做大題&#xff0c;把選擇題做…

力扣每日打卡17 49. 字母異位詞分組 (中等)

力扣 49. 字母異位詞分組 中等 前言一、題目內容二、解題方法1. 哈希函數2.官方題解2.1 前言2.2 方法一&#xff1a;排序2.2 方法二&#xff1a;計數 前言 這是刷算法題的第十七天&#xff0c;用到的語言是JS 題目&#xff1a;力扣 49. 字母異位詞分組 (中等) 一、題目內容 給…

C#抽象類和虛方法的作用是什么?

抽象類 (abstract class)&#xff1a; 不能直接實例化&#xff0c;只能被繼承。 用來定義一套基礎框架和規范&#xff0c;強制子類必須實現某些方法&#xff08;抽象方法&#xff09;。 可用來封裝一些共通的邏輯&#xff0c;減少代碼重復。 虛方法 (virtual)&#xff1a; …

PowerBi中ALLEXCEPT怎么使用?

在 Power BI 的 DAX 中&#xff0c;ALLEXCEPT() 是一個非常重要的函數&#xff0c;用來實現**“在保留部分篩選條件的前提下&#xff0c;移除其他所有篩選器”**&#xff0c;它常用于 同比、占比、累計匯總 等分析中。 ? 一、ALLEXCEPT 是什么意思&#xff1f; 函數全稱&…

IQ信號和實信號的關系與轉換的matlab實現

IQ信號 IQ信號通常是指兩路正交的信號(I路和Q路),在實際信號采樣中,通常會進行IQ采樣,將實信號轉換為復基帶信號進行存儲。 IQ信號轉實信號 IQ信號轉為實信號,其實就是將IQ兩路正交信號通過上變頻合并為一個實數的帶通信號,這通常在通信系統中用于將基帶信號調制到載…

【鋰電池剩余壽命預測】LSTM長短期記憶神經網絡鋰電池剩余壽命預測(Matlab源碼)

目錄 效果一覽程序獲取程序內容代碼分享研究內容基于LSTM長短期記憶神經網絡的鋰電池剩余壽命預測摘要關鍵詞1. 引言1.1 研究背景1.2 研究現狀與問題1.3 研究目的與意義2. 文獻綜述2.1 鋰電池剩余壽命預測方法概述2.2 傳統預測方法的優勢與不足2.3 LSTM在鋰電池壽命預測中的應用…

具身智能的理論基礎

引言 在人工智能與認知科學快速發展的背景下&#xff0c;“具身智能”&#xff08;Embodied Intelligence&#xff09;這一概念日益受到重視。具身智能是指智能體的認知能力不僅源于其大腦&#xff08;或中央處理單元&#xff09;&#xff0c;更根植于其身體的結構、感官與其所…

【數據結構】勵志大廠版·初級(二刷復習)雙鏈表

前引&#xff1a;今天學習的雙鏈表屬于鏈表結構中最復雜的一種&#xff08;帶頭雙向循環鏈表&#xff09;&#xff0c;按照安排&#xff0c;我們會先進行復習&#xff0c;如何實現雙鏈表&#xff0c;如基本的頭插、頭刪、尾刪、尾插&#xff0c;掌握每個細節&#xff0c;隨后進…

CSS `display` 屬性詳解(完整版)

CSS display 屬性詳解&#xff08;完整版&#xff09; 1. 屬性值及特性詳解 display 屬性控制元素的布局類型和生成的框類型&#xff0c;以下是 所有有效值 及其特性&#xff1a; 1.1 基礎類型 值描述布局行為是否生成塊級框典型用途block元素獨占一行&#xff0c;寬度自動撐…

【數據結構 · 初階】- 堆的實現

目錄 一.初始化 二.插入 三.刪除&#xff08;堆頂、根&#xff09; 四.整體代碼 Heap.h Test.c Heap.c 我們使用順序結構實現完全二叉樹&#xff0c;也就是堆的實現 以前學的數據結構只是單純的存儲數據。堆除了存儲數據&#xff0c;還有其他的價值——排序。是一個功能…

qt.tlsbackend.ossl: Failed to load libssl/libcrypto.

我的環境是windows&#xff0c;QT6.3.2&#xff08;msvc2019_64/mingw_64&#xff09; 出錯原因 QT沒有正確加載OpenSSL。 解決過程 1、確保安裝的有openssl。 文章結尾有個注意&#xff0c;是其他方式安裝過openssl&#xff0c;環境變量有&#xff0c;但是QT找不到的問題。…

【Linux】用戶權限

shell命令 1. Linux本質上是一個操作系統&#xff0c;但是一般的用戶不能直接使用它&#xff0c;而是需要通過外殼程序shell&#xff0c;來與Linux內核進行溝通。 2. shell的簡單定義&#xff1a;命令行解釋器。主要包含以下作用&#xff1a; 將使用者的命令翻譯給核心處理。將…

賽靈思 XC7K325T-2FFG900I FPGA Xilinx Kintex?7

XC7K325T-2FFG900I 是 Xilinx Kintex?7 系列中一款工業級 (I) 高性能 FPGA&#xff0c;基于 28 nm HKMG HPL 工藝制程&#xff0c;核心電壓標稱 1.0 V&#xff0c;I/O 電壓可在 0.97 V–1.03 V 之間靈活配置&#xff0c;并可在 –40 C 至 100 C 溫度范圍內穩定運行。該器件提供…

【題解-Acwing】847. 圖中點的層次

題目:847. 圖中點的層次 題目描述 給定一個 n 個點 m 條邊的有向圖,圖中可能存在重邊和自環。 所有邊的長度都是 1,點的編號為 1~n。 請你求出 1 號點到 n 號點的最短距離,如果從 1 號點無法走到 n 號點,輸出 ?1 。 輸入 第一行包含兩個整數 n 和 m。 接下來 m 行…

css圖片設為灰色

使用filter方式將圖片設置為灰色 普通圖片使用&#xff1a;filter: saturate(0); 純白圖片使用&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"width…

【Luogu】動態規劃一

P5414 [YNOI2019] 排序 - 洛谷 思路&#xff1a; 可以想到對于任意一個需要換位置的數字&#xff0c;我們不可能換兩次及以上&#xff0c;那么這題就可以轉化為求一個最大和的最長不遞減子序列&#xff0c;最后的答案就是眾和減去這個最大和 代碼&#xff1a; #include <…

什么是管理思維?

管理思維是指在管理活動中形成的系統性、戰略性和創造性的思考方式&#xff0c;幫助個人或團隊更高效地達成目標。它不僅適用于企業管理&#xff0c;也適用于個人成長、項目執行和復雜問題解決。以下是關于管理思維的核心內容&#xff1a; 一、管理思維的核心特征 1. 系統性思…