56.合并区间
56.合并区间
题解
思路:
1.按照区间头排序 2.栈里放第一个区间 3.遍历,如果当前的头在栈顶区间内,说明可以合并,进行合并 4.如果不在区间内,直接入栈
代码
func merge(intervals [][]int) [][]int { sort.Slice(intervals, func(i, j int) bool { v1, v2 := intervals[i], intervals[j] return v1[0] < v2[0] || v1[0] == v2[0] && v1[1] < v2[1] }) stack := [][]int{intervals[0]} for i := 1; i < len(intervals); i++ { cnt1 := stack[len(stack)-1] cnt2 := intervals[i] if cnt1[0] <= cnt2[0] && cnt1[1] >= cnt2[0] { cnt1[1] = max(cnt1[1], cnt2[1]) stack[len(stack)-1] = cnt1 } else { stack = append(stack, cnt2) } } return stack } func max(i, j int) int { if i > j { return i } return j }