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
    
  • 相关阅读:
    poj 2337 欧拉回路输出最小字典序路径 ***
    hdu 4831
    hdu 4832 dp ***
    hdu 4833 离散化+dp ****
    hdu 4006 优先队列 2011大连赛区网络赛F **
    hdu 4005 双联通 2011大连赛区网络赛E *****
    hdu 4004 二分 2011大连赛区网络赛D
    hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
    hdu 4002 欧拉函数 2011大连赛区网络赛B
    跨域经验总结
  • 原文地址:https://www.cnblogs.com/panweiwei/p/12900208.html
Copyright © 2011-2022 走看看