zoukankan      html  css  js  c++  java
  • 496. 下一个更大元素 I






    方法一思路:用栈

    将nums2顺序入栈stack[],当栈不空时,取待入栈元素num和栈顶元素top比较,若num>top且top在nums1中,则num即是所找的数。

    class Solution(object):
        def nextGreaterElement(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: List[int]
            """
            # 初始化返回值
            ans = [-1]*len(nums1)
            # 用字典记录下nums1中每个元素的下标
            dict = {}
            for i, num in enumerate(nums1):
                dict[num] = i
            # 模拟栈
            stack = []
            # 遍历nums2
            for num in nums2:
                # 当栈不空,且栈顶元素小于待入栈数字
                while stack and stack[-1] < num:
                    # 取栈顶元素
                    top = stack.pop()
                    # 若栈顶元素在nums1中,则num即为nums2右侧比top大的第一个元素,记录在ans中
                    if top in dict:
                        ans[dict[top]] = num
                # 栈空则将当前数字入栈
                stack.append(num)
            return ans
    

    方法二:

    class Solution(object):
        def nextGreaterElement(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: List[int]
            """
           	ans = []
            for i in range(len(nums1)):
                index = nums2.index(nums1[i])
                temp = nums2[index + 1:]
                # 在nums1右侧是否找到更大元素的标志
                flag = False
                for j in range(len(temp)):
                    if temp[j] > nums1[i]:
                        ans.append(temp[j])
                        # 标志置真
                        flag = True
                        break
                # 没找到则返回-1
                if not flag:
                    ans.append(-1)
            return ans
    

    代码三:

    class Solution(object):
        def nextGreaterElement(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: List[int]
            """
            ans = []
            for i in range(len(nums1)):
                index = nums2.index(nums1[i])
                temp = nums2[index + 1:]
                for j in range(len(temp)):
                    if temp[j] > nums1[i]:
                        ans.append(temp[j])
                        break
                # 没找到则返回-1
                # 原来python里的else还能这么用!!
                else:
                    ans.append(-1)
            return ans
    
  • 相关阅读:
    sublime text 安装json插件
    通过坐标系求覆盖物面积
    关于大数据入门的相关闲聊
    渡月橋 ~君 想ふ~
    数据库快照
    oracle 11g安装与使用
    IaaS、PaaS、SaaS介绍(非原创)
    Android项目模块化/组件化开发(非原创)
    开发人员必备的网络知识(非原创)
    公司常见管理系统介绍(非原创)
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12900208.html
Copyright © 2011-2022 走看看