Leetcode435.無重疊區間
阿新 • • 發佈:2020-12-31
題目連結:435.無重疊區間
思路:動態規劃。假設第i個區間至少擦除n個區間,即dp[i]=n。所以第i+1個區間需要擦除最少的區間數為dp[i+1]=min(dp[i]+1, dp[j]+cnt);其中,cnt表示第i個區間與前i-j個區間重疊了,重疊數cnt=i-j。
程式碼:
class Solution { public int eraseOverlapIntervals(int[][] intervals) { if(intervals.length == 0) return 0; Arrays.sort(intervals, (a, b)->{ if(a[0] == b[0]) return a[1] - b[1]; return a[0] - b[0]; }); int[] dp = new int[intervals.length]; dp[0] = 0; for(int i=1; i<intervals.length; i++){ int j=i-1; while(j>=0 && intervals[j][1] > intervals[i][0]){ j --; } if(i==1){ dp[i] = i-j-1; }else{ dp[i] = Math.min(dp[i-1] + 1, j < 0 ? i-j-1 : dp[j] + i-j-1); } } return dp[dp.length-1]; } }
執行用時:3 ms, 在所有 Java 提交中擊敗了83.29%的使用者
記憶體消耗:38.7 MB, 在所有 Java 提交中擊敗了20.68%的使用者