496. 下一个更大元素 I
496. 下一個(gè)更大元素 I
- 題目
- 分析
- 我的解答
- 官方解答
題目
給定兩個(gè) 沒(méi)有重復(fù)元素 的數(shù)組 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個(gè)元素在 nums2 中的下一個(gè)比其大的值。
nums1 中數(shù)字 x 的下一個(gè)更大元素是指 x 在 nums2 中對(duì)應(yīng)位置的右邊的第一個(gè)比 x 大的元素。如果不存在,對(duì)應(yīng)位置輸出 -1 。
示例 1:
輸入: nums1 = [4,1,2], nums2 = [1,3,4,2].
輸出: [-1,3,-1]
解釋:
對(duì)于num1中的數(shù)字4,你無(wú)法在第二個(gè)數(shù)組中找到下一個(gè)更大的數(shù)字,因此輸出 -1。
對(duì)于num1中的數(shù)字1,第二個(gè)數(shù)組中數(shù)字1右邊的下一個(gè)較大數(shù)字是 3。
對(duì)于num1中的數(shù)字2,第二個(gè)數(shù)組中沒(méi)有下一個(gè)更大的數(shù)字,因此輸出 -1。
示例 2:
輸入: nums1 = [2,4], nums2 = [1,2,3,4].
輸出: [3,-1]
解釋:
對(duì)于 num1 中的數(shù)字 2 ,第二個(gè)數(shù)組中的下一個(gè)較大數(shù)字是 3 。
對(duì)于 num1 中的數(shù)字 4 ,第二個(gè)數(shù)組中沒(méi)有下一個(gè)更大的數(shù)字,因此輸出 -1 。
提示:
nums1和nums2中所有元素是唯一的。
nums1和nums2 的數(shù)組大小都不超過(guò)1000。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/next-greater-element-i
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
分析
我的解答
class Solution:def nextGreaterElement(self, nums1, nums2):dic = {}result = []for i,item in enumerate(nums2):dic[item] = il = len(dic)for item in nums1:i = dic[item]if max(nums2[i:])<= item:result.append(-1)else:for temp in nums2[i:]:if temp>item:result.append(temp)breakreturn result官方解答
哈希映射
棧維護(hù)nums2中的元素,字典中保存下一個(gè)比當(dāng)前值大的值
如果棧為空或者當(dāng)前元素小于棧頂值,將item壓入棧
否則彈出棧頂值作為key,dic[key]=item,將item壓入棧
這兩句話直譯為
dic = {} result = [] stack = [] for item in nums2:if len(stack)>0 and stack[-1]>item :# stack[-1] index outof rangestack.append(item)elif len(stack) == 0:stack.append(item)else:while len(stack)>0:dic[stack.pop(-1)] = itemstack.append(item)翻譯一下
nums2中的每個(gè)元素都有一次入棧和出棧動(dòng)作。
dic = {} result = [] stack = [] for item in nums2:while len(stack) > 0 and stack[-1] < item:dic[stack.pop(-1)] = itemstack.append(item)完整版
class Solution:def nextGreaterElement(self, nums1, nums2):dic = {}result = []stack = []for item in nums2:# if len(stack)>0 and stack[-1]>item :# stack[-1] index outof range# stack.append(item)# elif len(stack) == 0:# stack.append(item)## else:while len(stack)>0 and stack[-1]<item:dic[stack.pop(-1)] = itemstack.append(item)# print(dic)for item in nums1:if item in dic:result.append(dic[item])else:result.append(-1)return result總結(jié)
以上是生活随笔為你收集整理的496. 下一个更大元素 I的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1047. 删除字符串中的所有相邻重复项
- 下一篇: 删除最外层的括号