欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

栈---下一个更大元素

程序员文章站 2022-05-20 13:15:33
...
  1. 题目
    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。
    nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。
  2. 示例
输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
    对于num1中的数字4,你无法在第二个数组中找到下一个更大的数字,因此输出 -1。
    对于num1中的数字1,第二个数组中数字1右边的下一个较大数字是 3。
    对于num1中的数字2,第二个数组中没有下一个更大的数字,因此输出 -1。
输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
    对于num1中的数字2,第二个数组中的下一个较大数字是3。
    对于num1中的数字4,第二个数组中没有下一个更大的数字,因此输出 -1。
  1. 注意

    nums1和nums2中所有元素是唯一的。
    nums1和nums2 的数组大小都不超过1000。

  2. 实现代码

public class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        int []temp = new int[nums1.length];
        for(int i=0;i<nums1.length;i++){
            for(int j=0;j<nums2.length;j++){
                //找到元素nums1[i]在nums2中对应位置j
                if(nums1[i]==nums2[j]){
                    //从位置j开始往后遍历找比第一个比元素nums1[i]大的元素
                    int k = j;
                    for(;k<nums2.length;k++){
                        if(nums1[i]<nums2[k]){
                            //将第一个比nums1[i]大的元素记录到temp数组中
                            temp[i]=nums2[k];
                            //找到退出循环
                            break;
                        }
                    }
                    //不存在比nums1[i]大的元素,使temp[i]=-1
                    if(k==nums2.length){
                        temp[i]=-1;
                    }
                    //nums1为nums2的子集,肯定能在nums2中找到nums1中相同的元素
                    // 不需要考虑不存在相同元素的情况,退出循环即可
                    break;
                }
            }
        }
        return temp;
    }
}

相关标签: