496. Next Greater Element I
来源:互联网 发布:淘宝账号密码格式 编辑:程序博客网 时间:2024/05/18 00:14
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:
- All elements in
nums1
andnums2
are unique. - The length of both
nums1
andnums2
would not exceed 1000.
class Solution(object): def nextGreaterElementOn3(self, findNums, nums): arr = [] for i in findNums: length = len(nums) for j in range(0, length): if i == nums[j]: for k in range(j, length): if nums[k] > i: arr.append(nums[k]) break if k == length - 1: arr.append(-1) break return arr
看了博客。大神们的思路是,构建一个栈,用来存储nums里的元素。当遍历nums时,如果当前元素大于栈顶,则出栈直到栈顶大于等于当前元素或栈为空。对于出栈的每个元素,用一个map记录元素与greater的映射对,(python里是dict),按照大神们的思路重写一下:
class Solution(object): def nextGreaterElement(self, findNums, nums): """ :type findNums: List[int] :type nums: List[int] :rtype: List[int] """ if not findNums or not nums: return [] dict = {} stack = [] stack.append(nums[0]) size = len(nums) for i in range(1, size): while len(stack) > 0 and nums[i] > stack[len(stack) - 1]: dict[stack.pop()] = nums[i] stack.append(nums[i]) arr = [] for i in findNums: if i in dict.keys(): arr.append(dict.get(i)) else: arr.append(-1) return arr
比刚刚快了一点,因为只需遍历一遍nums即可,减少了一层循环。但是时间上还是不理想。
随后看了大神的代码,同样的思路也是Python写的,简短了许多。
class Solution(object): def nextGreaterElement(self, findNums, nums): """ :type findNums: List[int] :type nums: List[int] :rtype: List[int] """ d = {} st = [] ans = [] for x in nums: while len(st) and st[-1] < x: d[st.pop()] = x st.append(x) for x in findNums: ans.append(d.get(x, -1)) return ans
看看人家的时间,深深地受挫中。。。
0 0
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496.Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 496. Next Greater Element I
- 欢迎您在新浪博客安家
- spring 中 bean 生命周期
- Java中基本类型转换
- spring 管理struts2单实例问题
- Java方法的本质、形式参数、返回值
- 496. Next Greater Element I
- python实现的模板生成脚本
- Java分支结构switch语句
- spring用的是单实例 ,但是支持多线程
- struts2自定义拦截器
- Java循环结构,while、for和break…
- 大数据解密:《人民的名义》是怎么火起来的?
- struts2文件上传下载
- myeclipse中通过oci连接oracle