[LeetCode] 496. Next Greater Element I 下一个较大的元素 I
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.
给2个没有重复元素的数组nums1, nums2,nums1的元素是由nums2的子集组成,求nums1中每个数字在nums2右边第一个较大的数字,如果不存在则为-1。返回所找到的结果组成的数组。
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
解法:栈,递减栈。先求出nums2中所有元素的右边第一个较大数字的位置,并记录到map中。然后,因为nums1是子数组,循环nums1中的元素,记录在map中值并返回。求nums2中下一个较大元素时用递减栈,循环元素,当前元素大于栈顶元素时,就弹出栈顶元素,并记录栈顶元素下一个最大就是当前元素。然后继续比较栈顶元素,直到小于或等于栈顶元素。
G家followup: 如果data是stream data怎么改代码和设计输出。
Java:
- public int[] nextGreaterElement(int[] findNums, int[] nums) {
- Map<Integer, Integer> map = new HashMap<>(); // map from x to next greater element of x
- Stack<Integer> stack = new Stack<>();
- for (int num : nums) {
- while (!stack.isEmpty() && stack.peek() < num)
- map.put(stack.pop(), num);
- stack.push(num);
- }
- for (int i = 0; i < findNums.length; i++)
- findNums[i] = map.getOrDefault(findNums[i], -1);
- return findNums;
- }
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
Python: wo
- 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 []
- m = {}
- for i in range(len(nums) - 1):
- for j in range(i + 1, len(nums)):
- if nums[j] > nums[i]:
- m[nums[i]] = nums[j]
- break
- if not m.get(nums[i], 0):
- m[nums[i]] = -1
- m[nums[-1]] = -1
- res = []
- for num in findNums:
- res.append(m[num])
- return res
C++:
- class Solution {
- public:
- vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
- stack<int> s;
- unordered_map<int, int> m;
- for (int n : nums) {
- while (s.size() && s.top() < n) {
- m[s.top()] = n;
- s.pop();
- }
- s.push(n);
- }
- vector<int> ans;
- for (int n : findNums) ans.push_back(m.count(n) ? m[n] : -1);
- return ans;
- }
- };
类似题目:
[LeetCode] 503. Next Greater Element II 下一个较大的元素 II
[LeetCode] 556. Next Greater Element III 下一个较大的元素 III
[LeetCode] 739. Daily Temperatures 每日温度
All LeetCode Questions List 题目汇总
[LeetCode] 496. Next Greater Element I 下一个较大的元素 I的更多相关文章
- [LeetCode] 503. Next Greater Element II 下一个较大的元素 II
Given a circular array (the next element of the last element is the first element of the array), pri ...
- [LeetCode] 556. Next Greater Element III 下一个较大的元素 III
Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...
- [leetcode]496. Next Greater Element I下一个较大元素
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...
- [LeetCode] Next Greater Element II 下一个较大的元素之二
Given a circular array (the next element of the last element is the first element of the array), pri ...
- 496 Next Greater Element I 下一个更大元素 I
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值.nums1 中数字 x 的下一个更大 ...
- Leetcode496.Next Greater Element I下一个更大的元素1
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...
- 503 Next Greater Element II 下一个更大元素 II
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它 ...
- [LeetCode] Next Greater Element III 下一个较大的元素之三
Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...
- [LeetCode] Next Greater Element I 下一个较大的元素之一
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...
随机推荐
- python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'的解决方法:
全文转载至:http://www.cnblogs.com/testyao/p/5658200.html python3中用HTMLTestRunner.py报ImportError: No modul ...
- http消息与webservice
别人的:在一台配置较低的PC上,同时开启服务端与客户端,10000条数据,使用基于http的消息逐条进行传递,从开始传递至全部接收并处理完毕,大概需要465秒的时间:而在同一台机器上,使用WebSer ...
- 项目Alpha冲刺(团队)-总结篇
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:为了交项目干杯 作业目标:描述项目预期计划.现实进展.过程体会.组员分工 ...
- ZOJ - 3157:Weapon (几何 逆序对)
pro:给定平面上N条直线,保证没有直线和Y轴平行. 求有多少交点的X坐标落在(L,R)开区间之间,注意在x=L或者R处的不算. sol:求出每条直线与L和R的交点,如果A直线和B直线在(L,R)相交 ...
- 使用Patroni和HAProxy创建高可用的PostgreSQL集群
操作系统:CentOS Linux release 7.6.1810 (Core) node1:192.168.216.130 master node2:192.168.216.132 slave n ...
- 牛客小白月赛12 H 华华和月月种树
题目链接: 题意:有三个操作 操作 1:表示节点 i 长出了一个新的儿子节点,权值为0,编号为当前最大编号 +1(也可以理解为,当前是第几个操作 1,新节点的编号就是多少). 操作 2:表示华华上线做 ...
- idea中properties配置文件 注释显示中文乱码问题
- web开发——文件的上传和下载
众所皆知,web上传大文件,一直是一个痛.上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的. 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路. 实现文件夹 ...
- canvas的基本使用
一.定义 canvas最早是由Apple引入Webkit的,<canvas>元素包含于HTML5中 HTML5的canvas元素使用JavaScript在网页上绘制图像,画布是一个矩形区域 ...
- Dense Semantic Labeling with Atrous Spatial Pyramid Pooling and Decoder for High-Resolution Remote Sensing Imagery(高分辨率语义分割)
对 Potsdam and Vaihingen 公开数据集进行处理,得到了SOTA的结果,超越DeepLab_v3+,提出的网络结构如下:结合了ASPP和FCN,UNet