Leetcode #496 Next Greater Element I

public class Solution {
    public int[] nextGreaterElement(int[] findNums, int[] nums) {
        Map map = new HashMap<>();
        Stack stack = new Stack<>();
        int[] res = new int[findNums.length];
        for(int num:nums){
            while(!stack.isEmpty()&&stack.peek()

直接看代码,维护一个map和一个stack,map的作用是保存每个值的next greater element。
具体过程为,遍历数组,若新来的元素,比stack中的元素小,则直接插入,若新来的元素,比stack顶部的元素大,则该元素即为栈顶元素的next greater element,将栈顶元素pop出来,并保存在map中,并循环该操作,直至栈内元素比新元素都大,再插入新元素。
遍历数组完成后,即得到所有元素的next greater element。
接下来只需要查找新数组的元素了。

类似的题目还有leetcode #503

public class Solution {
    public int[] nextGreaterElements(int[] nums) {
        Map map = new HashMap<>();
        int len = nums.length;
        Stack stack = new Stack<>();
        int[] res = new int[len];
        Arrays.fill(res, -1);
        for(int i=0;i

此时之前题目中的两个数组变为一个,即假设该数组为头尾相连。
这时候的改法就是遍历数组两遍,并只在第一遍的时候插入栈。

你可能感兴趣的:(Leetcode #496 Next Greater Element I)