1. 程式人生 > >496. Next Greater Element I - LeetCode

496. Next Greater Element I - LeetCode

println leetcode 否則 problem img 子集 技術 problems java

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;
}

496. Next Greater Element I - LeetCode