Leetcode 496 下乙個更大元素 I

2022-09-22 05:18:08 字數 2145 閱讀 7804

nums1中數字x下乙個更大元素是指xnums2中對應位置右側第乙個x大的元素。

給你兩個沒有重複元素的陣列nums1nums2,下標從0開始計數,其中nums1nums2的子集。

對於每個0 <= i < nums1.length,找出滿足nums1[i] == nums2[j]的下標j,並且在nums2確定nums2[j]的 下乙個更大元素 。如果不存在下乙個更大元素,那麼本次查詢的答案是-1

返回乙個長度為nums1.length的陣列ans作為答案,滿足ans[i]是如上所述的下乙個更大元素

案例1:

輸入:nums1 = [4,1,2], nums2 = [1,3,4,2].

輸出:[-1,3,-1]

- 4 ,用加粗斜體標識,nums2 = [1,3,4,2]。不存在下乙個更大元素,所以答案是 -1 。

- 1 ,用加粗斜體標識,nums2 = [1,3,4,2]。下乙個更大元素是 3 。

- 2 ,用加粗斜體標識,nums2 = [1,3,4,2]。不存在下乙個更大元素,所以答案是 -1 。

案例2:

輸入:nums1 = [2,4], nums2 = [1,2,3,4].

輸出:[3,-1]

- 2 ,用加粗斜體標識,nums2 = [1,2,3,4]。下乙個更大元素是 3 。

- 4 ,用加粗斜體標識,nums2 = [1,2,3,4]。不存在下乙個更大元素,所以答案是 -1 。

我們可以暴力地逐個計算 \(\textit_1\)中的每個元素值 \(\textit_1[i]\) 在 \(\textit_2\)中對應位置的右邊的第乙個比 \(\textit_1[i]\) 大的元素值。具體地,我們使用如下方法:

陣列 \(\textit\)即為最終結果。

class solution 

int index = j + 1;

while (index < length && nums2[index] <= currnums1)

if (index < length) else

}return ans;

}}

我們可以先預處理 \(\textit_2\),使查詢 \(\textit_1\)中的每個元素在 \(\textit_2n\) 中對應位置的右邊的第乙個更大的元素值時不需要再遍歷 \(\textit_2\)。於是,我們將題目分解為兩個子問題:

我們可以使用單調棧來解決第 \(1\) 個子問題。倒序遍歷 \(\textit_2\),並用單調棧中維護當前位置右邊的更大的元素列表,從棧底到棧頂的元素是單調遞減的。

具體地,每次我們移動到陣列中乙個新的位置 \(i\),就將當前單調棧中所有小於 \(\textit_2[i]\) 的元素彈出單調棧,當前位置右邊的第乙個更大的元素即為棧頂元素,如果棧為空則說明當前位置右邊沒有更大的元素。隨後我們將位置 \(i\) 的元素入棧。

因為題目規定了 \(\textit_2n\)是沒有重複元素的,所以我們可以使用雜湊表來解決第 \(2\) 個子問題,將元素值與其右邊第乙個更大的元素值的對應關係存入雜湊表。

class solution 

int index = j + 1;

while (index < length && nums2[index] <= currnums1)

if (index < length) else

}return ans;

}}

Leetcode 496 下乙個更大元素

給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...

leetcode 496 下乙個更大元素 I

給定兩個沒有重複元素的陣列nums1和nums2,其中nums1是nums2的子集。找到nums1中每個元素在nums2中的下乙個比其大的值。nums1中數字 x 的下乙個更大元素是指 x 在nums2中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。示例 1 輸入 nums1...

leetcode 496 下乙個更大元素 I

給定兩個沒有重複元素的陣列nums1和nums2,其中nums1是nums2的子集。找到nums1中每個元素在nums2中的下乙個比其大的值。nums1中數字x的下乙個更大元素是指x在nums2中對應位置的右邊的第乙個比x大的元素。如果不存在,對應位置輸出 1。示例 1 輸入 nums1 4,1,2...