leetcode436 尋找右區間

2021-10-06 18:39:44 字數 1522 閱讀 4197

給定一組區間,對於每乙個區間 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。最後...