Go語言題解LeetCode下一個更大元素示例詳解
題目描述
原題鏈接 :
496. 下一個更大元素 I - 力扣(LeetCode) (leetcode-cn.com)
nums1 中數(shù)字 x 的 下一個更大元素 是指 x 在 nums2 中對應(yīng)位置 右側(cè) 的 第一個 比 x 大的元素。
給你兩個 沒有重復(fù)元素 的數(shù)組 nums1 和 nums2 ,下標(biāo)從 0 開始計數(shù),其中nums1 是 nums2 的子集。
對于每個 0 <= i < nums1.length ,找出滿足 nums1[i] == nums2[j] 的下標(biāo) j ,并且在 nums2 確定 nums2[j] 的 下一個更大元素 。如果不存在下一個更大元素,那么本次查詢的答案是 -1 。
返回一個長度為 nums1.length 的數(shù)組 ans 作為答案,滿足 ans[i] 是如上所述的 下一個更大元素 。
示例 1:
輸入:nums1 = [4,1,2], nums2 = [1,3,4,2]. 輸出:[-1,3,-1] 解釋:nums1 中每個值的下一個更大元素如下所述: - 4 ,用加粗斜體標(biāo)識,nums2 = [1,3,4,2]。不存在下一個更大元素,所以答案是 -1 。 - 1 ,用加粗斜體標(biāo)識,nums2 = [1,3,4,2]。下一個更大元素是 3 。 - 2 ,用加粗斜體標(biāo)識,nums2 = [1,3,4,2]。不存在下一個更大元素,所以答案是 -1 。
示例 2:
輸入:nums1 = [2,4], nums2 = [1,2,3,4]. 輸出:[3,-1] 解釋:nums1 中每個值的下一個更大元素如下所述: - 2 ,用加粗斜體標(biāo)識,nums2 = [1,2,3,4]。下一個更大元素是 3 。 - 4 ,用加粗斜體標(biāo)識,nums2 = [1,2,3,4]。不存在下一個更大元素,所以答案是 -1 。
提示:
1 <= nums1.length <= nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 10^4
- nums1和nums2中所有整數(shù) 互不相同
- nums1 中的所有整數(shù)同樣出現(xiàn)在 nums2 中
思路分析
這種題目典型的使用單調(diào)棧就行了啊。
- 元素入棧之后,其下面的元素一定是其左邊第一個比它小的數(shù);(可用來求每個元素左邊更小的第一個元素)
- 若在元素插入之前,棧頂元素比插入元素更大,那么棧頂元素一定是待插入元素左邊一個更大的數(shù)
- 若在元素插入之前,棧頂元素比插入元素更大,那么棧頂元素一定是所有需要出棧的元素右邊更小的數(shù);(可用來求每個元素右邊更小的第一個元素)
- 最后一定會留下最小的數(shù)(對較小 的數(shù)更有利)
AC 代碼
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
map<int,int> PMap;
stack<int> DStack;
vector<int> result;
for(int i=nums2.size()-1;i>=0;i--){
if(DStack.empty()){
PMap.insert({nums2[i],-1});
DStack.push(nums2[i]);
}
else if(DStack.top()>nums2[i]){
PMap.insert({nums2[i],DStack.top()});
DStack.push(nums2[i]);
}
else{
while(!DStack.empty()&&DStack.top()<nums2[i])
DStack.pop();
if(DStack.empty())
PMap.insert({nums2[i],-1});
else
PMap.insert({nums2[i],DStack.top()});
DStack.push(nums2[i]);
}
}
for(int i=0;i<nums1.size();i++)
result.push_back(PMap[nums1[i]]);
return result;
}
};以上就是Go語言題解LeetCode下一個更大元素示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go題解下一個更大元素的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言使用defer+recover解決panic導(dǎo)致程序崩潰的問題
golang Gorm與數(shù)據(jù)庫完整性約束詳解

