给你两个没有重复元素的数组nums1 和 nums2 ,其中nums1 是 nums2 的子集。
请你找出nums1 中每个元素子在nums2 中的下一个比较大的值。
nums1 中数字x 的下一个更大元素是指nums2 中对应位置的右边的第一个比x 的元素。如果不存在,对应位置输出-1。

  • 解法一
    • 遍历查找
      代码如下:
class Solution1:
    def nextGreaterElement(self, nums1, nums2):
        res = []
        for i in range(len(nums1)):
            index = nums2.index(nums1[i]) + 1
            while index < len(nums2):
                if nums1[i] < nums2[index]:
                    res.append(nums2[index])
                    break
                index += 1
            else:
                res.append(-1)
        return res
  • 解法二
  • 利用栈的单调性
  • 代码如下
class Solution:
    def nextGreaterElement(self, nums1, nums2):
        # 利用栈的单调递增性
        nl = len(nums2)
        s1_s2 = {}
        stack = [nums2[0]]
        # 构建num2中的当前元素和下一个更大元素的映射
        for i in range(1, nl):
        	while stack and nums2[i] > stack[-1]:
        		s1_s2[stack.pop()] = nums2[i]
       		stack.append(nums2[i])
     	return [s1_s2.get(item,-1) for item in nums1]
        	
        
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐