题目:找出下一个更大的元素
解法一、
哈希表
时间复杂度:O(N^2)
空间复杂度:O(N)
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
HashMap<Integer,Integer> map = new HashMap<>();
int[] result = new int[nums1.length];
for(int i=0; i< nums2.length ;i++){
map.put(nums2[i],-1);
for(int j= i+1;j<nums2.length;j++ ){
if (nums2[j]>nums2[i]){
map.put(nums2[i],nums2[j]);
break;
}
}
}
for (int i = 0; i<nums1.length; i++){
result[i] = map.get(nums1[i]);
}
return result;
}
解法二、
哈希表和栈结合
时间复杂度:O(N+M)
空间复杂度:O(N)
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2){
Stack<Integer> stack = new Stack<>();
HashMap<Integer,Integer> map = new HashMap<>();
int len = nums1.length;
int[]res = new int[len];
for (int i= 0 ; i<nums2.length ; i++ ) {
while (!stack.isEmpty()&& nums2[i]> stack.peek()){
int temp = stack.pop();
map.put(temp,nums2[i]);
}
stack.push(nums2[i]);
}
while(!stack.isEmpty()){
map.put(stack.pop(),-1);
}
for(int i = 0 ; i<nums1.length ;i++){
res[i] = map.get(nums1[i]);
}
return res;
}
}