1. 程式人生 > 其它 >LeetCode 496 下一個更大的元素I

LeetCode 496 下一個更大的元素I

給你兩個 沒有重複元素 的陣列nums1nums2,其中nums1nums2的子集。

請你找出 nums1中每個元素在nums2中的下一個比其大的值。

nums1中數字x的下一個更大元素是指xnums2中對應位置的右邊的第一個比x大的元素。如果不存在,對應位置輸出 -1

示例 1:

輸入: nums1 = [4,1,2], nums2 = [1,3,4,2].
輸出: [-1,3,-1]
解釋:
    對於 num1 中的數字 4 ,你無法在第二個陣列中找到下一個更大的數字,因此輸出 -1 。
    對於 num1 中的數字 1 ,第二個陣列中數字1右邊的下一個較大數字是 3 。
    對於 num1 中的數字 2 ,第二個陣列中沒有下一個更大的數字,因此輸出 -1 。

示例 2:

輸入: nums1 = [2,4], nums2 = [1,2,3,4].
輸出: [3,-1]
解釋:
   對於 num1 中的數字 2 ,第二個陣列中的下一個較大數字是 3 。
    對於 num1 中的數字 4 ,第二個陣列中沒有下一個更大的數字,因此輸出 -1 。

提示:

  • 1 <= nums1.length <= nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 104
  • nums1nums2中所有整數 互不相同
  • nums1 中的所有整數同樣出現在 nums2
public static int[] nextGreaterElement(int[] nums1, int[] nums2) {
    if (nums1 == null || nums1.length == 0
            || nums2 == null || nums2.length == 0) return new int[]{};

    int length1 = nums1.length;
    int length2 = nums2.length;
    int[] ans = new int[length1];
    for (int i = 0; i < length1; i++) {
        ans[i] = -1;
        boolean flag = false;
        for (int j = 0; j < length2; j++) {
            if (nums2[j] == nums1[i]) flag = true;
            if (flag && nums2[j] > nums1[i]) {
                ans[i] = nums2[j];
                break;
            }
        }
    }
    return ans;
}