給定一組區間,對於每乙個區間 i,檢查是否存在乙個區間 j,它的起始點大於或等於區間 i 的終點,這可以稱為 j 在 i 的「右側」。
對於任何區間,你需要儲存的滿足條件的區間 j 的最小索引,這意味著區間 j 有最小的起始點可以使其成為「右側」區間。如果區間 j 不存在,則將區間 i 儲存為 -1。最後,你需要輸出乙個值為儲存的區間值的陣列。
注意:
示例 1:
輸入:[[
1,2]
]輸出:[-
1]**解釋*
*:集合中只有乙個區間,所以輸出-
1。
示例 2:
輸入:[[
3,4]
,[2,
3],[
1,2]
]輸出:[-
1,0,
1]解釋:對於[3,
4],沒有滿足條件的「右側」區間。
對於[2,3
],區間[3,
4]具有最小的「右」起點;
對於[1,2
],區間[2,
3]具有最小的「右」起點。
這道題求的是,對於每乙個區間(x,y),在區間陣列中找到第乙個大於等於y(即大於等於y,且最接近y)的區間的索引。
很容易想到另乙個題目:給定有序陣列和target,找到第乙個大於等於target的數字的索引。
因此我們將原區間陣列按照區間端點公升序排列,同時記錄該區間在原排列中的索引。
因此,對於任意乙個區間(x,y),y等價於target,所有區間的x等價於有序陣列,在其中二分查詢即可。
class
solution
return left == nums.
size()
?-1: nums[left]
.second;
}public
: vector<
int>
findrightinterval
(vectorint>>
& intervals)
; vectorint,
int>> nums;
for(
int i =
0; i < intervals.
size()
;++i));
}sort
(nums.
begin()
, nums.
end())
; vector<
int>
res(intervals.
size()
,-1)
;int tmp =-1
, target =0;
for(
int i =
0; i < intervals.
size()
;++i)
return res;}}
;
leetcode436 尋找右區間
給定一組區間,對於每乙個區間 i,檢查是否存在乙個區間 j,它的起始點大於或等於區間 i 的終點,這可以稱為 j 在 i 的 右側 對於任何區間,你需要儲存的滿足條件的區間 j 的最小索引,這意味著區間 j 有最小的起始點可以使其成為 右側 區間。如果區間 j 不存在,則將區間 i 儲存為 1。最後...
leetcode 436 尋找右區間
給定一組區間,對於每乙個區間 i,檢查是否存在乙個區間 j,它的起始點大於或等於區間 i 的終點,這可以稱為 j 在 i 的 右側 對於任何區間,你需要儲存的滿足條件的區間 j 的最小索引,這意味著區間 j 有最小的起始點可以使其成為 右側 區間。如果區間 j 不存在,則將區間 i 儲存為 1。最後...
Leetcode 436 尋找右區間
給定一組區間,對於每乙個區間 i,檢查是否存在乙個區間 j,它的起始點大於或等於區間 i 的終點,這可以稱為 j 在 i 的 右側 對於任何區間,你需要儲存的滿足條件的區間 j 的最小索引,這意味著區間 j 有最小的起始點可以使其成為 右側 區間。如果區間 j 不存在,則將區間 i 儲存為 1。最後...