mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 16:36:41 +08:00
77 lines
1.3 KiB
Go
77 lines
1.3 KiB
Go
package leetcode
|
|
|
|
import (
|
|
"sort"
|
|
)
|
|
|
|
// 解法一 DP O(n^2) 思路是仿造最长上升子序列的思路
|
|
func eraseOverlapIntervals(intervals [][]int) int {
|
|
if len(intervals) == 0 {
|
|
return 0
|
|
}
|
|
sort.Sort(Intervals(intervals))
|
|
dp, res := make([]int, len(intervals)), 0
|
|
for i := range dp {
|
|
dp[i] = 1
|
|
}
|
|
for i := 1; i < len(intervals); i++ {
|
|
for j := 0; j < i; j++ {
|
|
if intervals[i][0] >= intervals[j][1] {
|
|
dp[i] = max(dp[i], 1+dp[j])
|
|
}
|
|
}
|
|
}
|
|
for _, v := range dp {
|
|
res = max(res, v)
|
|
}
|
|
return len(intervals) - res
|
|
}
|
|
|
|
func max(a int, b int) int {
|
|
if a > b {
|
|
return a
|
|
}
|
|
return b
|
|
}
|
|
|
|
// Intervals define
|
|
type Intervals [][]int
|
|
|
|
func (a Intervals) Len() int {
|
|
return len(a)
|
|
}
|
|
func (a Intervals) Swap(i, j int) {
|
|
a[i], a[j] = a[j], a[i]
|
|
}
|
|
func (a Intervals) Less(i, j int) bool {
|
|
for k := 0; k < len(a[i]); k++ {
|
|
if a[i][k] < a[j][k] {
|
|
return true
|
|
} else if a[i][k] == a[j][k] {
|
|
continue
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// 解法二 贪心 O(n)
|
|
func eraseOverlapIntervals1(intervals [][]int) int {
|
|
if len(intervals) == 0 {
|
|
return 0
|
|
}
|
|
sort.Sort(Intervals(intervals))
|
|
pre, res := 0, 1
|
|
|
|
for i := 1; i < len(intervals); i++ {
|
|
if intervals[i][0] >= intervals[pre][1] {
|
|
res++
|
|
pre = i
|
|
} else if intervals[i][1] < intervals[pre][1] {
|
|
pre = i
|
|
}
|
|
}
|
|
return len(intervals) - res
|
|
}
|