int eraseOverlapIntervals(vector<vector<int>>& intervals) {
vector<vector<int>> sorted = intervals; sort(sorted.begin(), sorted.end());
function<int(int, int)> keep = [&](int i, int lastEnd) -> int {
if (i == (int)sorted.size()) return 0;
int best = keep(i + 1, lastEnd);
if (sorted[i][0] >= lastEnd) best = max(best, 1 + keep(i + 1, sorted[i][1]));
return best;
};
return (int)sorted.size() - keep(0, -1000000000);
}
public int eraseOverlapIntervals(int[][] intervals) {
int[][] sorted = intervals.clone();
Arrays.sort(sorted, (a, b) -> a[0] - b[0]);
return sorted.length - keep(sorted, 0, -1000000000);
}
private int keep(int[][] sorted, int i, int lastEnd) {
if (i == sorted.length) return 0;
int best = keep(sorted, i + 1, lastEnd);
if (sorted[i][0] >= lastEnd) best = Math.max(best, 1 + keep(sorted, i + 1, sorted[i][1]));
return best;
}
def erase_overlap_intervals(intervals):
sorted_iv = sorted(intervals, key=lambda p: p[0])
def keep(i, last_end):
if i == len(sorted_iv): return 0
best = keep(i + 1, last_end)
if sorted_iv[i][0] >= last_end: best = max(best, 1 + keep(i + 1, sorted_iv[i][1]))
return best
return len(sorted_iv) - keep(0, -10**9)
function eraseOverlapIntervals(intervals: number[][]): number {
const sorted = [...intervals].sort((a, b) => a[0] - b[0]);
const keep = (i: number, lastEnd: number): number => {
if (i === sorted.length) return 0;
let best = keep(i + 1, lastEnd);
if (sorted[i][0] >= lastEnd) best = Math.max(best, 1 + keep(i + 1, sorted[i][1]));
return best;
};
return sorted.length - keep(0, -1e9);
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
vector<vector<int>> sorted = intervals; sort(sorted.begin(), sorted.end());
int n = sorted.size();
vector<int> dp(n, 1);
int best = 1;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (sorted[j][1] <= sorted[i][0]) dp[i] = max(dp[i], dp[j] + 1);
}
best = max(best, dp[i]);
}
return n - best;
}
public int eraseOverlapIntervals(int[][] intervals) {
int[][] sorted = intervals.clone();
Arrays.sort(sorted, (a, b) -> a[0] - b[0]);
int n = sorted.length;
int[] dp = new int[n];
Arrays.fill(dp, 1);
int best = 1;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (sorted[j][1] <= sorted[i][0]) dp[i] = Math.max(dp[i], dp[j] + 1);
}
best = Math.max(best, dp[i]);
}
return n - best;
}
def erase_overlap_intervals(intervals):
sorted_iv = sorted(intervals, key=lambda p: p[0])
n = len(sorted_iv)
dp = [1] * n
best = 1
for i in range(1, n):
for j in range(i):
if sorted_iv[j][1] <= sorted_iv[i][0]: dp[i] = max(dp[i], dp[j] + 1)
best = max(best, dp[i])
return n - best
function eraseOverlapIntervals(intervals: number[][]): number {
const sorted = [...intervals].sort((a, b) => a[0] - b[0]);
const n = sorted.length;
const dp = new Array<number>(n).fill(1);
let best = 1;
for (let i = 1; i < n; i++) {
for (let j = 0; j < i; j++) {
if (sorted[j][1] <= sorted[i][0]) dp[i] = Math.max(dp[i], dp[j] + 1);
}
best = Math.max(best, dp[i]);
}
return n - best;
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
vector<vector<int>> sorted = intervals;
sort(sorted.begin(), sorted.end(), [](const vector<int>& a, const vector<int>& b) { return a[1] < b[1]; });
int kept = 1;
int end = sorted[0][1];
for (int i = 1; i < (int)sorted.size(); i++) {
if (sorted[i][0] >= end) {
kept++;
end = sorted[i][1];
}
}
return (int)sorted.size() - kept;
}
public int eraseOverlapIntervals(int[][] intervals) {
int[][] sorted = intervals.clone();
Arrays.sort(sorted, (a, b) -> Integer.compare(a[1], b[1]));
int kept = 1;
int end = sorted[0][1];
for (int i = 1; i < sorted.length; i++) {
if (sorted[i][0] >= end) {
kept++;
end = sorted[i][1];
}
}
return sorted.length - kept;
}
def erase_overlap_intervals(intervals):
sorted_iv = sorted(intervals, key=lambda p: p[1])
kept = 1
end = sorted_iv[0][1]
for i in range(1, len(sorted_iv)):
if sorted_iv[i][0] >= end:
kept += 1
end = sorted_iv[i][1]
return len(sorted_iv) - kept
function eraseOverlapIntervals(intervals: number[][]): number {
const sorted = [...intervals].sort((a, b) => a[1] - b[1]);
let kept = 1;
let end = sorted[0][1];
for (let i = 1; i < sorted.length; i++) {
if (sorted[i][0] >= end) {
kept++;
end = sorted[i][1];
}
}
return sorted.length - kept;
}
int eraseOverlapIntervals(vector<vector<int>>& intervals) {
vector<vector<int>> sorted = intervals; sort(sorted.begin(), sorted.end());
int prevEnd = sorted[0][1];
int removed = 0;
for (int i = 1; i < (int)sorted.size(); i++) {
if (sorted[i][0] < prevEnd) {
removed++;
prevEnd = min(prevEnd, sorted[i][1]);
} else {
prevEnd = sorted[i][1];
}
}
return removed;
}
public int eraseOverlapIntervals(int[][] intervals) {
int[][] sorted = intervals.clone();
Arrays.sort(sorted, (a, b) -> Integer.compare(a[0], b[0]));
int prevEnd = sorted[0][1];
int removed = 0;
for (int i = 1; i < sorted.length; i++) {
if (sorted[i][0] < prevEnd) {
removed++;
prevEnd = Math.min(prevEnd, sorted[i][1]);
} else {
prevEnd = sorted[i][1];
}
}
return removed;
}
def erase_overlap_intervals(intervals):
sorted_iv = sorted(intervals, key=lambda p: p[0])
prev_end = sorted_iv[0][1]
removed = 0
for i in range(1, len(sorted_iv)):
if sorted_iv[i][0] < prev_end:
removed += 1
prev_end = min(prev_end, sorted_iv[i][1])
else:
prev_end = sorted_iv[i][1]
return removed
function eraseOverlapIntervals(intervals: number[][]): number {
const sorted = [...intervals].sort((a, b) => a[0] - b[0]);
let prevEnd = sorted[0][1];
let removed = 0;
for (let i = 1; i < sorted.length; i++) {
if (sorted[i][0] < prevEnd) {
removed++;
prevEnd = Math.min(prevEnd, sorted[i][1]);
} else {
prevEnd = sorted[i][1];
}
}
return removed;
}