学习目标:
● 435. 无重叠区间
● 763.划分字母区间
● 56. 合并区间
学习内容:● 435. 无重叠区间
https://programmercarl.com/0435.无重叠区间.html
csharp
var eraseOverlapIntervals = function(intervals) {
intervals.sort((a,b)=>{
return a[0]-b[0]
})
if(intervals.length==1)return 0;
let count = 0
for(let i=1;i<intervals.length;i++){
if(intervals[i][0]<intervals[i-1][1]){
count++;
intervals[i][1] = Math.min(intervals[i][1],intervals[i-1][1])
}
}
return count
};
学习内容:● 763.划分字母区间
https://programmercarl.com/0763.划分字母区间.html
可以分为如下两步:
统计每一个字符最后出现的位置
从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点
csharp
会思路,但是不会写,哈希
let hash = {}
for(let i=0;i<s.length;i++){
hash[s[i]]=i
}
csharp
var partitionLabels = function(s) {
let hash = {}
for(let i=0;i<s.length;i++){
hash[s[i]]=i
}
let result = [];
let right=0,left=0;
for(let i=0;i<s.length;i++){
right = Math.max(hash[s[i]],right)
if(right==i){
result.push(right-left+1);
left = i+1
}
}
return result
};
学习内容:● 56. 合并区间
https://programmercarl.com/0056.合并区间.html
csharp
result直接先插入intervals[0],在判断重叠后合并,只判断右区间就可以,排序后左区间一定是最小的,直接操作result就可以
csharp
var merge = function(intervals) {
if(intervals.length<=1)return intervals;
intervals.sort((a,b)=>{
return a[0]-b[0]
})
let result =[intervals[0]]
for(let i=1;i<intervals.length;i++){
if(intervals[i][0]<=result[result.length-1][1]){
// intervals[i][0] = Math.min(intervals[i][0],result[result.length-1][0])不用合并,一定是最小的
result[result.length-1][1] = Math.max(intervals[i][1],result[result.length-1][1])
}else{
result.push(intervals[i])
}
}
return result
};