日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day36-435. 无重叠区间

發布時間:2024/1/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day36-435. 无重叠区间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

435.?無重疊區間

思路:

遇到二維數組的區間問題,先排序。畫圖,按照start遞增排序,如果start相等則按照end遞增。

為什么按照start遞增排序?保證start有序,每個item的start不會重復。

逆向思維,刪除最少數量的區間,即保留最多數量的區間。從左到右先讓start從小到大排序,如果cur和下一個元素重合,則選擇兩個元素中end更小的那個,這樣剩余區間更大,可以選擇更多元素。如果cur和下一個元素不重合,則都選擇。

var eraseOverlapIntervals = function(intervals) {intervals.sort((a,b) => {if(a[0]===b[0]){return a[1]-b[1]}else{return a[0]-b[0]}})console.log(intervals)const que=[intervals[0]]for(let i=1; i<intervals.length; i++){let cur=que[que.length-1]if(cur[1] > intervals[i][0]){if(cur[1]>intervals[i][1]){que.pop()que.push(intervals[i])}}else{que.push(intervals[i])}}console.log(que)return intervals.length-que.length };

763.?劃分字母區間

思路:

統計每個字符出現的start和end位置,如果x字符與y字符區間重合,則更新end位置

難點在于統計字符起止位置時有點浪費空間了,開了兩個二維數組,實際上start位置不需要知道。重新掃描一遍s字符串,更新當前字符出現的最遠位置即可。

var partitionLabels = function(s) {const mp=new Array(26)for(let i=0; i<mp.length; i++){mp[i]=new Array(2).fill(-1)}for(let i=0; i<s.length; i++){const n=s[i].charCodeAt()-'a'.charCodeAt()// console.log(n)if(mp[n][0]===-1){mp[n]=[i,i]}else{mp[n][1]=i}}// 按照位置sort一下mp.sort((a,b) => {return a[0]-b[0]})const memo=[]for(let x of mp){if(x[0]!==-1){memo.push(x)}}let cur=memo[0], res=[]console.log(memo)for(let i=1; i<memo.length; i++){if(memo[i][0]===-1) continue// 如果不重合 分片 更新curif(cur[1]<memo[i][0]){res.push(cur[1]-cur[0]+1)cur=memo[i]}else{// 如果重合 更新cur的終點cur[1]=Math.max(cur[1], memo[i][1])}console.log(cur)}// 到達終點 打包分片res.push(cur[1]-cur[0]+1)return res };

56.?合并區間

var merge = function(intervals) {// 先按照start遞增intervals.sort((a,b) => {if(a[0]===b[0]){return a[1]-b[1]}return a[0]-b[0]})const que=[intervals[0]]console.log(intervals)for(let i=1; i<intervals.length; i++){// 如果重合 則更新queif(que[que.length-1][1]>=intervals[i][0]){que[que.length-1][1]=Math.max(que[que.length-1][1], intervals[i][1])}else{// 如果不重合 則push進來que.push(intervals[i])}}return que };

總結

以上是生活随笔為你收集整理的day36-435. 无重叠区间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。