Leetcode 496. 下一個更大元素 I

北顧丶發表於2020-10-18

給定兩個 沒有重複元素 的陣列 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個元素在
nums2 中的下一個比其大的值。

nums1 中數字 x 的下一個更大元素是指 x 在 nums2 中對應位置的右邊的第一個比 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 。
class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        int[] result = new int[nums1.length];
        for (int i = 0; i < nums1.length; i++)
        {
            if (nums1[i] >= Arrays.stream(nums2).max().getAsInt())
            {
                result[i] = -1;
            }
            else
            {
                int index = search(nums2, nums1[i]);
                for (int j = index; j < nums2.length; j++)
                {
                    if (nums2[j] > nums1[i])
                    {
                        result[i] = nums2[j];
                        break;
                    }
                    if (j == nums2.length - 1)
                    {
                        result[i] = -1;
                    }
                }
            }
        }
        return result;
    }
    public static int search(int[] num, int e)
    {
        for (int i = 0; i < num.length; i++)
        {
            if (num[i] == e)
            {
                return i;
            }
        }
        return 0;
    }
}

相關文章