435. 无重叠区间
/*** @param {number[][]} intervals* @return {number}*/
var eraseOverlapIntervals = function(intervals) {intervals.sort((x,y)=>(x[1]-y[1]))let r=1for(let i=0;i<intervals.length-1;i++){//重叠if(intervals[i][1]>intervals[i+1][0]){intervals[i+1][1]=intervals[i][1]<intervals[i+1][1]?intervals[i][1]:intervals[i+1][1];}//不重叠 else{r++} }return intervals.length-r};
想法
按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。
763.划分字母区间
/*** @param {string} s* @return {number[]}*/
var partitionLabels = function(s) {let ok=new Array(26)//哈希,写出每一个字母对应的节点for(let i=0;i<s.length;i++){ok[s.charCodeAt(i)-97]=i}//结果let c=[]//记录当前区间最大值let max=-1for(let i=0;i<s.length;i++){//更新maxif(ok[s.charCodeAt(i)-97]>max)max=ok[s.charCodeAt(i)-97]//最大值等于当前字母的值,找到一个if(i===max)// c.push(c.length===0?max+1:max-c[c.length-1]+1)c.push(i+1)}if(c.length===1)return cfor(let i=c.length-1;i>0;i--){c[i]=c[i]-c[i-1]}return c
};
想法
### 困难 * ok[s.charCodeAt(i)-97]=i >s.charCodeAt(i)是char转为
56. 合并区间
/*** @param {number[][]} intervals* @return {number[][]}*/
var merge = function(intervals){intervals.sort((x,y)=>(x[0]-y[0]))//按开始节点排序let r=0;let c=[];let les=intervals[0][0];let end=intervals[0][1];let max=intervals[0][1];for(let i=0;i<intervals.length-1;i++){//不重叠if(max<intervals[i+1][0]){c.push([les,max])les=intervals[i+1][0]max=intervals[i+1][1]}//有重叠,合并if(max>=intervals[i+1][0]){max=intervals[i+1][1]>max?intervals[i+1][1]:max}}c.push([les,max])return c
};