Javascript每天一道算法題(十四)——合并數組區間_中等

文章目錄

  • 1、問題
  • 2、示例
  • 3、解決方法
    • (0)方法0——雙指針(錯誤思路)
    • (1)方法1——雙指針(正確)
  • 總結


1、問題

以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] = [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。

2、示例

示例 1:
輸入:intervals = [[1,3],[2,6],[8,10],[15,18]]
輸出:[[1,6],[8,10],[15,18]]
解釋:區間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].
示例 2:
輸入:intervals = [[1,4],[4,5]]
輸出:[[1,5]]
解釋:區間 [1,4] 和 [4,5] 可被視為重疊區間。

3、解決方法

(0)方法0——雙指針(錯誤思路)

錯誤思路:把二維數組變為一維數組排序后進行雙指針。雖然這樣用示例一是有效果的,如下圖


let intervals = [[1,3],[2,6],[4,5],[15,18]]
var merge = function(intervals) {let newArray = [];intervals.forEach(item => {newArray.push( ...item)});newArray.sort((a,b)=>{ return a-b}) // 排序// newArray = new Set(...newArray);// console.log('aa', newArray);let left=0,right=1;let arr = []arr.push(newArray[0])while(right < newArray.length) {if(newArray[left] +1 !== newArray[right] && newArray[left] +1 !== newArray[right]) {arr.push(newArray[right])} left++right++}console.log('res', arr);
};
merge(intervals);

在這里插入圖片描述

將intervals改為[[1,3],[2,6],[4,5],[15,18]],應該返回 [1,6,15,18],實際上返回為[1, 15, 18],并不能返回偶數的數據,最后進行兩兩放到一個新數組中

(1)方法1——雙指針(正確)

let intervals = [[2,6],[1,3],[8,10],[15,18]]
var merge = function(intervals) {// 1: 排序:將二維數組的第一項進行排序// 二維數組的第一個相等,就根據第二個排序,不想等就根據第一個排序// 排的是二維數組的第一個,不是二維數組里面每一個數組的第一個第二個排序// 如[[2,6],[1,3],[8,10],[15,18]] 變成[[1,3],[2,6],[8,10],[15,18]]intervals.sort((a,b)=> a[0]== b[0] ? a[1] - b[1]: a[0] - b[0])// 2-1:定義左右指針let left = intervals[0][0],right = intervals[0][1];// 2-2: 定義返回符合條件的空數組let res = []; // 3:遍歷二維數組,獲取每一項進行比較intervals.forEach((item, index) => {debugger// 4: 如果遍歷后的第一個值大于右指針,說明在一個區間,將當前這個區間的左右指針添加到數組中,并將當前item的值設置為左右指針// 如[1,3] 中 1 > 3 不成立,right = 3// [2,6]中 2> 3 不成立 right = 6// [8,10]中 8 > 6 成立 ,將[1,6]添加到數組中,并且左右指針改為當前item的值if(item[0] > right) {res.push([left,right])left = item[0]right = item[1]} else {right = item[1]}});// 5: 遍歷完成后,由于最后區間的值沒有對比,所以額外添加到數組中res.push([left, right])console.log('res', res); // 6: 返回題目效果
};
merge(intervals);

總結

難度: 中等
注意點:使用雙指針解決該問題的時候,不能將二維數組扁平為一維數組進行計算。

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

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

相關文章

怎么讀一個網絡的代碼

1.網絡代碼怎么來的&#xff1f; 我想要實現一個功能&#xff0c;這個功能是輸入一張圖像&#xff0c;返回一個類別結果。 所以很明確就有三個部分&#xff0c;一個是接受圖像輸入&#xff0c;一個是處理圖像得到處理結果&#xff0c;一個是對處理結果判斷生成結果。 現在想要使…

rocketmq 發送時異常:system busy 和 broker busy 解決方案

之前寫的解決方案,都是基于測試環境測試的.到生產環境之后,正常使用沒有問題,生產環境壓測時,又出現了system busy異常(簡直崩潰).最后在rocketmq群里大佬指導下,終于解決(希望是徹底解決). 下面直接給出結果: 目前通過生產環境各種參數修改測試得出: broker busy異常: 可通…

Using PeopleCode in Application Engine Programs在應用引擎程序中使用PeopleCode

This section provides an overview of PeopleCode and Application Engine programs and discusses how to: 本節概述了PeopleCode和應用程序引擎程序&#xff0c;并討論了如何: Decide when to use PeopleCode.決定何時使用PeopleCode。Consider the program environment.考…

Java之《ATM自動取款機》(面向對象)

《JAVA編程基礎》項目說明 一、項目名稱&#xff1a; 基于JAVA控制臺版本銀行自動取款機 項目要求&#xff1a; 實現銀行自動取款機的以下基本操作功能&#xff1a;讀卡、取款、查詢。&#xff08;自動取款機中轉賬、修改密碼不作要求&#xff09; 具體要求&#xff1a; 讀卡…

基于SSM的校園奶茶點單管理系統

基于SSM的校園奶茶點單管理系統的設計與實現~ 開發語言&#xff1a;Java數據庫&#xff1a;MySQL技術&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 主頁 奶茶列表 登錄界面 管理員界面 用戶界面 摘要 隨著社會的發展和科技的進…

ubuntu搭建phpmyadmin+wordpress

Ubuntu搭建phpmyadmin wordpress Linux系統設置&#xff1a;Ubuntu 22配置apache2搭建phpmyadmin配置Nginx環境&#xff0c;搭建wordpress Linux系統設置&#xff1a;Ubuntu 22 配置apache2 安裝apache2 sudo apt -y install apache2設置端口號為8080 sudo vim /etc/apache…

paddle detection 訓練參數

#####################################基礎配置##################################### # 檢測算法使用YOLOv3,backbone使用MobileNet_v1,數據集使用roadsign_voc的配置文件模板,本配置文件默認使用單卡,單卡的batch_size=1 # 檢測模型的名稱 architecture: YOLOv3 # 根據…

【CCF-PTA】第03屆Scratch第05題 -- 統計出現次數最多的字

統計出現次數最多的字 【題目描述】 我國自古流傳下來不少膾炙人口的詩歌&#xff0c;各具特色&#xff0c;別具一格。有些詩只用寥寥幾個字&#xff0c;就能描繪出生動的意境。 請找出以下詩篇中出現次數最多的字&#xff0c;如果有多個字出現次數相同&#xff0c;則答案為…

Java中基于SSM框架的數據保存方法與日期處理

? 一、詳解 在SSM框架中&#xff0c;保存數據通常涉及到服務層和數據訪問層。服務層處理業務邏輯&#xff0c;而數據訪問層負責與數據庫進行交互。 二、代碼 Override public void save(Student student) { Date date new Date(); SimpleDateFormat format new Sim…

什么是LLC電路?

LLC電路是由2個電感和1個電容構成的諧振電路&#xff0c;故稱之為LLC&#xff1b; LLC電路主要由三個元件組成&#xff1a;兩個電感分別為變壓器一次側漏感(Lr)和勵磁電感(Lm)&#xff0c;電容為變壓器一次側諧振電容(Cr)。這些元件構成了一個諧振回路&#xff0c;其中輸入電感…

【C/PTA】函數專項練習(四)

本文結合PTA專項練習帶領讀者掌握函數&#xff0c;刷題為主注釋為輔&#xff0c;在代碼中理解思路&#xff0c;其它不做過多敘述。 目錄 6-1 計算A[n]1/(1 A[n-1])6-2 遞歸實現順序輸出整數6-3 自然數的位數(遞歸版)6-4 分治法求解金塊問題6-5 漢諾塔6-6 重復顯示字符(遞歸版)…

字母異位詞分組

給你一個字符串數組&#xff0c;請你將 字母異位詞 組合在一起。可以按任意順序返回結果列表。 字母異位詞 是由重新排列源單詞的所有字母得到的一個新單詞。 示例 1: 輸入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 輸出: [[“bat”],[“nat”,“tan…

Android MemoryFile 共享內存

應用場景&#xff1a; 跨進程傳輸大數據&#xff0c;如文件、圖片等&#xff1b; 技術選型&#xff1a; 共享內存–MemoryFile&#xff1b; 優點&#xff1a; 1. 共享內存沒有傳輸大小限制&#xff0c;所以和應用總的分配內存一樣&#xff08;512MB&#xff09;&#xff1…

Java 根據文件名獲取文件類型

比如文件名是“測試文件.png”&#xff0c;則獲取的文件類型就是 png 直接上一個通用的方法&#xff0c;拿去直接就能用。 // 比如入參文件名是“測試文件.png”&#xff0c;則出參就是 pngprivate String getFileSuffix(String fileName) {String[] fileStr fileName.split(&…

educoder中共享單車之數據可視化

第1關:繪制地圖 <%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&…

專用設備上的SD卡插入電腦想讀取數據,提示要格式化?

環境&#xff1a; Win10 專業版 車載感應數據專用SD卡 問題描述&#xff1a; 專用設備上的SD&#xff0c;現在把SD卡從設備取出&#xff0c;用讀卡器插入電腦提示要格式化&#xff1f; 解決方案&#xff1a; 1.先進入PE查看SD分區情況&#xff0c;SD格式為ext4 查看文件…

lombok中使用@Builder構造器模式時的默認值問題

這里寫自定義目錄標題 問題case原因解決方案 文章參考來源&#xff1a;https://chenyongjun.vip/articles/107 問題case Lombok 使用廣泛&#xff0c;這里分享一個 Lombok Builder 小 case&#xff0c;今天自己踩了坑。 Data Builder public class User {private String name…

MLP 有哪些可學習的參數

多層感知機&#xff08;MLP&#xff09;的參數是需要在訓練過程中學習的。MLP是一種前饋神經網絡&#xff0c;其結構包括輸入層、多個隱藏層和輸出層。在訓練過程中&#xff0c;MLP通過反向傳播算法來調整網絡的權重&#xff0c;以最小化預測值與實際值之間的誤差。 MLP的學習…

安卓開發——Android Studio常見報錯與解決方法

1. No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-android 這個錯誤是由于較新版本的NDK的./toolchains目錄中沒有arm-linux-androideabi文件&#xff0c;解決辦法是從舊的NDK版本里面復制到自己的NDK的版本里面&#xff0c;就可以了。 打…

WSL登錄時提示nsenter: cannot open /proc/320/ns/time: No such file or directory的解決辦法

在登錄 WSL 的 Ubuntu 時&#xff0c;不僅要求 root 權限&#xff0c;還登錄失敗&#xff0c;提示“nsenter: cannot open /proc/320/ns/time: No such file or directory”。 解決辦法是在 powershell 中執行 “wsl – sudo vi /etc/profile”命令&#xff0c;刪除文件內容&a…