https://leetcode.cn/problems/next-greater-element-i/description/
根据校验nums2中的元素是否存在于nums1中 的时机 分为不同做法
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Deque<Integer> st = new ArrayDeque<>();
int[] res=new int[nums1.length];
// 存储位置映射
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums1.length;i++)
map.put(nums1[i],i);
Arrays.fill(res,-1);
for(int i=0;i<nums2.length;i++)
{
while(!st.isEmpty() && nums2[i]>nums2[st.peek()]) // 比较之前遍历过的元素
{
// nums2[i]此时是栈顶的答案,下一个循环继续比较栈顶
int top=nums2[st.pop()];
if(map.containsKey(top)) // 判断元素是否存在于nums1中
res[map.get(top)]=nums2[i];
}
//此时nums2[i]是小于栈顶的,加入成为新的栈顶
st.push(i); // 当前元素小于栈顶元素,加入成为新的栈顶
}
return res;
}
}
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Deque<Integer> st = new ArrayDeque<>();
int[] res=new int[nums1.length];
// 存储位置映射
Map<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums1.length;i++)
map.put(nums1[i],i);
Arrays.fill(res,-1);
for(int i=0;i<nums2.length;i++)
{
while(!st.isEmpty() && nums2[i]>nums2[st.peek()]) // 比较之前遍历过的元素
{
// nums2[i]此时是栈顶的答案,下一个循环继续比较栈顶
int top=nums2[st.pop()];
res[map.get(top)]=nums2[i];
}
//此时nums2[i]是小于栈顶的,加入成为新的栈顶
if(map.containsKey(nums2[i]))st.push(i); // 判断元素是否存在于nums1中
}
return res;
}
}
标签:int,res,元素,栈顶,nums1,st,496,leetcode,nums2 From: https://www.cnblogs.com/lxl-233/p/18415422