思路一:暴力解法
遍历取出数组nums1中的每一个数,然后将每个数在nums2数组中找到下一个最大的数
详细代码:
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int[] nums3=new int[nums1.length];
for(int j=0;j<nums1.length;j++){ //遍历所有的nums1
int num=nums1[j];
boolean flag=false;
for(int i=0;i<nums2.length;i++) {
if(num==nums2[i])
flag=true;
if(flag) { //找到才开始比较
if(nums2[i]>num) {
nums3[j]=nums2[i];
break;
}
}
if(flag==true&&nums3[j]==0)
nums3[j]=-1;
}
}
return nums3;
}
思路二:使用栈
可以使用栈来解决,因为nums1中的元素都在nums2中,所以可以通过找nums2中的每个元素的下一个最大元素来获得一个表,最后通过查表来解决问题
首先创建栈,先遍历nums2数组,当栈不为空的时候,看栈顶元素如果比当前元素大,就将当前元素入栈,栈顶元素如果比当前元素小,就将栈顶元素弹出来,这两个就形成键值对,将键值对存到HashMap中,最后遍历nums1找到对应的数据就可以
代码:
//使用栈的思想
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Stack<Integer> stack=new Stack<>();//创建栈
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums2.length;i++) {
while(!stack.isEmpty()&&stack.peek()<nums2[i]) {
map.put(stack.pop(),nums2[i]);
}
stack.push(nums2[i]);
}
int[] result=new int[nums1.length];
for(int i=0;i<nums1.length;i++) {
result[i]=map.getOrDefault(nums1[i],-1);
}
return result;
}