首页 > 其他分享 >leetcode 496. Next Greater Element I

leetcode 496. Next Greater Element I

时间:2023-05-30 18:06:51浏览次数:36  
标签:Greater nums1 stack number Element array next 496 greater

You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements in the corresponding places of nums2.

The Next Greater Number of a number x in nums1 is the first greater number to its right in nums2. If it does not exist, output -1 for this number.

Example 1:

Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
Output: [-1,3,-1]
Explanation:
    For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1.
    For number 1 in the first array, the next greater number for it in the second array is 3.
    For number 2 in the first array, there is no next greater number for it in the second array, so output -1.

Example 2:

Input: nums1 = [2,4], nums2 = [1,2,3,4].
Output: [3,-1]
Explanation:
    For number 2 in the first array, the next greater number for it in the second array is 3.
    For number 4 in the first array, there is no next greater number for it in the second array, so output -1.

Note:

  1. All elements in nums1 and nums2 are unique.
  2. The length of both nums1 and nums2 would not exceed 1000.

解法1:

暴力

class Solution(object):
    def nextGreaterElement(self, findNums, nums):
        """
        :type findNums: List[int]
        :type nums: List[int]
        :rtype: List[int]
        """
        m = {n:i for i,n in enumerate(nums)}
        ans = []
        for n in findNums:
            pos = m[n]
            inf = float("inf")
            ng_num = inf
            while pos+1<len(nums):
                pos += 1
                if nums[pos]>n:
                    ng_num =  nums[pos]
                    break
            if ng_num == inf:
                ans.append(-1)
            else:
                ans.append(ng_num)
        return ans

方法2:使用stack,非常巧妙的解决,时间复杂度O(n),学会观察是王道。

Key observation:
Suppose we have a decreasing sequence followed by a greater number
For example [5, 4, 3, 2, 1, 6] then the greater number 6 is the next greater element for all previous numbers in the sequence

We use a stack to keep a decreasing sub-sequence, whenever we see a number x greater than stack.peek() we pop all elements less than x and for all the popped ones, their next greater element is x For example [9, 8, 7, 3, 2, 1, 6] The stack will first contain [9, 8, 7, 3, 2, 1] and then we see 6 which is greater than 1 so we pop 1 2 3 whose next greater element should be 6

class Solution(object):
    def nextGreaterElement(self, findNums, nums):
        """
        :type findNums: List[int]
        :type nums: List[int]
        :rtype: List[int]
        """
        # [1, 3, 4, 2, 2.5, 6, 5, 3.5, 1.5, 4.5, 0, 7]
        # 1=>3
        # 3=>4
        # 4=>6
        # 2=>2.5
        # 2.5=>6
        # 6=>7
        # 5=>7
        # 3.5=>4.5
        # 1.5=>4.5
        # 4.5=>7
        # 0=>7
        # for each num in nums, create lookup table for NG numer
        # use lookup table to find each num's NG in findNums 
        ng_map = {}
        stack = []
        for n in nums:
            while stack and stack[-1] < n:
                ng_map[stack.pop()] = n
            stack.append(n)
        return [ng_map[n] if n in ng_map else -1 for n in findNums]

 

标签:Greater,nums1,stack,number,Element,array,next,496,greater
From: https://blog.51cto.com/u_11908275/6381132

相关文章

  • leetcode 378. Kth Smallest Element in a Sorted Matrix
    Givenanxnmatrixwhereeachoftherowsandcolumnsaresortedinascendingorder,findthekthsmallestelementinthematrix.Notethatitisthekthsmallestelementinthesortedorder,notthekthdistinctelement.Example:matrix=[[1,5,9......
  • leetcode 27. Remove Element
    Givenanarraynumsandavalueval,removeallinstancesofthatvaluein-placeandreturnthenewlength.Donotallocateextraspaceforanotherarray,youmustdothisbymodifyingtheinputarrayin-placeTheorderofelementscanbechanged.Itdoesn&......
  • leetcode Kth Largest Element in a Stream——要熟悉heapq使用
    703.KthLargestElementinaStreamEasyDesignaclasstofind thekthlargestelementinastream.Notethatitisthekthlargestelementinthesortedorder,notthekthdistinctelement.Your KthLargest classwillhaveaconstructorwhichacceptsanin......
  • 黑马Vue3 + ElementPlus + Pinia 小兔鲜电商项目2023版
    黑马Vue3+ElementPlus+Pinia小兔鲜电商项目2023版download:3w51xuebccomElementPlus:优雅高效的Vue组件库随着Vue.js在前端开发中的广泛应用,越来越多的UI组件库涌现出来。而其中一款备受瞩目的组件库就是ElementPlus。作为一款基于Vue3.0的组件库,ElementPlus不仅完美地继承了......
  • element-ui中Select 选择器value-key的使用
    场景描述很多时候我们都需要使用下拉框Select选择器。在获取值的时候,通常只需要传递对应的id给后端就行了。但是特殊情况,后端不想去查库,不仅需要我们id,还有name,code之类的。这个时候前端通过id去查询对应的name,code这样做会写循环,查询,非常的麻烦。其实Select选择器......
  • ElementUI的form表单验证注意事项
    ElementUI的form表单验证注意事项1.踩过的坑,记录一下。验证表单时一直提示必填项未填写,实际已经填写了。2.el-form的正确使用流程el-form就是最外层的form表单,做验证有三个必填属性,不填写验证就会不正确。ref属性:相当于ID,稍后的提交按钮函数会用到它。:model:绑定要用......
  • 【蓝桥杯集训·每日一题】AcWing 4496. 吃水果
    写在前面本人CSDN博客主页:这里一、题目1、原题链接4496.吃水果2、题目描述n个小朋友站成一排,等着吃水果。一共有m种水果,每种水果的数量都足够多。现在,要给每个小朋友都发一个水果,要求:在所有小朋友都拿到水果后,恰好有k个小朋友拿到的水果和其左边相邻小朋友拿到的水果不同(最左......
  • element ui 编辑页面 重新选择日期后页面显示的日期没反应
    问题:可以看到数据是实时更新了。加一个强制渲染显示正常了 this.$forceUpdate()方法会触发一次视图重新渲染,即使组件没有显式声明要更新数据或属性,也可以强制刷新页面。但是,由于它可能带来性能和其他副作用,因此应该尽量避免使用,并且只用于特定情况下的修复。......
  • 直播app开发搭建,Vue Element UI Upload 上传多张图片
    直播app开发搭建,VueElementUIUpload上传多张图片<template> <div>  <el-card>   <h1>轮播图-图片上传管理</h1>   <el-divider></el-divider>   <!--注意:使用:model="uploadImgForm"不要使用v-model="uploadImgForm&q......
  • springboot+springsecurity+jwt+elementui图书管理系统
    图书管理系统关注公号:java大师,回复“图书”,获取源码一、springboot后台1、mybatis-plus整合1.1添加pom.xml<!--mp逆向工程--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></de......