題目
插入區間
給出乙個無重疊的 ,按照區間起始端點排序的區間列表。
在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 1:
輸入:intervals = [[1,3],[6,9]], newinterval = [2,5]
輸出:[[1,5],[6,9]]
示例 2:
輸入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newinterval = [4,8]
輸出:[[1,2],[3,10],[12,16]]
解釋:這是因為新的區間 [4,8] 與 [3,5],[6,7],[8,10] 重疊。
1.暴力方式
class
solution
// 陣列區間為空的情況
if(intervals == null || intervals.length ==0)
// 獲取當前插入區間的最大值和最小值
int newmin = newinterval[0]
;int newmax = newinterval[1]
;int startp =
0, allp =0;
// startp開始到有區間的位置方便後續結合 allp 一共結合了幾個區間
int[
] centerinterval =
newint[2
];// 用來存放中間新合起來的區間資料
int n = intervals.length;
for(
int i =
0; i < n; i++)if
(newmax > intervals[i][1
]&&((i+1)
== n ||
((i+1)
<=
(n-1
)&& intervals[i+1]
[0]> newmax)))
continue;}
// 判斷最小值在區間之前 1. i=0 之前 2. i != 0 之前
// 1.i=0 最小區間大於插入最小區間
// 2.i不為0,if(
(i ==
0&& intervals[i][0
]> newmin)
||(intervals[i][0
]> newmin &&
(i-1
)>=
0&& intervals[i-1]
[1]< newmin)
) allp +=1;
if(intervals[i][1
]>= newmax)if(
((i+1)
== n && newmax >= intervals[i][1
])||(newmax >= intervals[i][1
]&&((i+1)
<=
(n-1
)&& intervals[i+1]
[0]> newmax)))
continue;}
// 判斷最小值在區間之後 n 之後
if(i ==
(n-1
)&& intervals[i][1
]< newmin ||
(intervals[i][1
]< newmin &&
(i+1
)<=
(n-1
)&& intervals[i+1]
[0]> newmin)
)else
if(intervals[i+1]
[0]> newmax)
continue;}
// 判斷最大值是否在範圍內
if(intervals[i][0
]<= newmax && intervals[i][1
]>= newmax)
// 判斷最大值是否在區間外if(
((i+1)
== n && newmax >= intervals[i][1
])||(newmax >= intervals[i][1
]&&(i+1
)<=
(n-1
)&& intervals[i+1]
[0]> newmax)
) allp +=1;
break;}
// 陣列中的整個區間都在新新增的區間中
if(intervals[i][0
]> newmin && intervals[i][1
]> newmin && intervals[i][0
]< newmax && intervals[i][1
]< newmax)
startp +=1;
continue;}
int m = n - allp +1;
// 上面遍歷完
int[
] result =
newint
[m][2]
;for
(int k =
0; k < m; k++
)else
}else
else
if(k == startp)
else}}
return result;
}}
2.採用找上下區間的方式處理
class
solution
// 陣列區間為空的情況
if(intervals == null || intervals.length ==0)
int l = intervals.length;
int start =
0, end = l-1;
// 找出下區間
while
(start < l && intervals[start][1
]< newinterval[0]
)// 找出上區間
while
(end >=
0&& intervals[end][0
]> newinterval[1]
)int numl = l -
(end-start)
;int
result =
newint
[numl][2
];for(
int i =
0; i < numl; i++
)else
if(i == start)
else
if(end ==-1
)else
result[i]
= data;
}else
}return result;
}}
僅記錄。 演算法之插入區間
給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...
演算法 插入區間
題目 給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果重疊,則合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 思路 1,先寫乙個方法,用於判斷兩個陣列是否重疊,...
Leetcode之插入區間
給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...