496. Next Greater Element I - LeetCode

Question

496. Next Greater Element I

Solution

题目大意:给你一个组数A里面每个元素都不相同。再给你一个数组B,元素是A的子集,问对于B中的每个元素,在A数组中相同元素之后第一个比它的元素是多少。
思路:把nums1中的元素存储到一个map里,遍历nums2,如果能从map中取到值,就遍历nums2中后续元素的值并与当前元素做比较,如果存在比当前元素大的值就取该值(第一个),否则返回-1.
Java实现:

public int[] nextGreaterElement(int[] nums1, int[] nums2) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int tmp : nums1) {
        map.put(tmp, -1);
    }
    for (int i = 0; i < nums2.length; i++) {
        int tmp = nums2[i];
        Integer nextGreaterElement = map.get(tmp);
        if (nextGreaterElement != null) {
            for (int j=i+1; j<nums2.length; j++) {
                if (tmp < nums2[j]) {
                    nextGreaterElement = nums2[j];
                    break;
                }
            }
            map.put(tmp, nextGreaterElement);
            // System.out.println(tmp + ", " + nextGreaterElement);
        }
    }
    // System.out.println();
    int[] result = new int[nums1.length];
    for (int i = 0; i < nums1.length; i++) {
        result[i] = map.get(nums1[i]);
        // System.out.print(result[i] + ",");
    }
    return result;
}

猜你喜欢

转载自www.cnblogs.com/okokabcd/p/9265507.html
今日推荐