Литкод 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.
Примечание.
- Все элементы в
nums1
иnums2
уникальны. - Длина как
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