Литкод 496. Следующий больший элемент I

Вопрос

Вам даны два массива (без дубликатов) nums1 и nums2, где элементы nums1 являются подмножеством nums2. Найдите все следующие большие числа для элементов nums1 в соответствующих местах nums2.

Следующее большее число числа x в nums1 — это первое большее число справа от него в nums2. Если он не существует, выведите для этого числа -1.

Пример 1:

Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
Output: [-1,3,-1]
Explanation:
    For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1.
    For number 1 in the first array, the next greater number for it in the second array is 3.
    For number 2 in the first array, there is no next greater number for it in the second array, so output -1.

Пример 2:

Input: nums1 = [2,4], nums2 = [1,2,3,4].
Output: [3,-1]
Explanation:
    For number 2 in the first array, the next greater number for it in the second array is 3.
    For number 4 in the first array, there is no next greater number for it in the second array, so output -1.

Примечание.

  1. Все элементы в nums1 и nums2 уникальны.
  2. Длина как nums1, так и nums2 не превысит 1000.

Решение

Соблюдайте правила вопроса. Я улучшаю небольшое решение, используя each_with_index, превращая array в map. Усилие этой попытки довольно хорошее, я победил 93% пользователей Ruby. Я также обнаружил, что каждый раз при отправке я получал разное время выполнения, но недалеко друг от друга.

# @param {Integer[]} find_nums
# @param {Integer[]} nums
# @return {Integer[]}
def next_greater_element(find_nums, nums)
    res = []
    map = {}
    nums.each_with_index{|v,i| map[v] = i}
    find_nums.each do |f|
        flag = true
        index = map[f]
        (index+1..nums.size-1).each do |i|
            if nums[i] > f
                res.push nums[i]
                flag = false
                break
            end
        end
        res.push -1 if flag
    end
    res
end