leetcode496下乙個更大元素I

2021-09-29 06:47:48 字數 1991 閱讀 8360

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

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

示例一

輸入: nums1 = [4,1,2], nums2 = [1,3,4,2].

輸出: [-1,3,-1]

解釋:對於num1中的數字4,你無法在第二個陣列中找到下乙個更大的數字,因此輸出 -1。

對於num1中的數字1,第二個陣列中數字1右邊的下乙個較大數字是 3。

對於num1中的數字2,第二個陣列中沒有下乙個更大的數字,因此輸出 -1。

注意:nums1和nums2中所有元素是唯一的。

nums1和nums2 的陣列大小都不超過1000

思路 :第乙個陣列每個數和第二個陣列中的數對比nums1(i),找出第二個陣列中與之相等的數nums2(j),和二陣列中後面的數字挨個比大小,比nums2(j)大的話寫入,不存在寫入-1

這算什麼思路簡直就是暴力解法無腦操作,就這一開始還編錯了,白中白進化過程怎麼就這麼難呢 講真程式設計厲害的人腦子裡是不都有乙個搭好的樓梯啊 羨慕

class solution(object):

def nextgreaterelement(self, nums1, nums2):

""":type nums1: list[int]

:type nums2: list[int]

:rtype: list[int]

"""y = ;

for i in range(len(nums1)):

for j in range(len(nums2)):

if nums1[i] == nums2[j]:

if j+1 == len(nums2):

else:

t = 1

for k in range(j+1,len(nums2)):

if nums2[k]>nums2[j]:

t = 0

break

if t:

return y

改進寫法

class solution:

def nextgreaterelement(self, nums1: list[int], nums2: list[int]) -> list[int]:

new =

for i in nums1:

index = nums2.index(i)

for j, n in enumerate(nums2[index:]):

if n > i:

break

# 判斷到了最後乙個元素

if j + 1 == len(nums2[index:]):

return new

但是這種解法時間複雜度很高

利用棧和雜湊表的思路解題:

class solution(object):

def nextgreaterelement(self, nums1, nums2):

""":type nums1: list[int]

:type nums2: list[int]

:rtype: list[int]

"""stack, hash = , {}

for n in nums2:

while stack and stack[-1] < n:

hash[stack.pop()] = n # 當nums2的後面存在比它大存入雜湊表 不存在就不管

return [hash.get(x, -1) for x in nums1]

dic.get(key,default) 當查詢鍵值找不到時就返回預設值-1

Leetcode 496 下乙個更大元素

給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。...

leetcode 496 下乙個更大元素 I

給定兩個沒有重複元素的陣列nums1和nums2,其中nums1是nums2的子集。找到nums1中每個元素在nums2中的下乙個比其大的值。nums1中數字 x 的下乙個更大元素是指 x 在nums2中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 1。示例 1 輸入 nums1...

leetcode 496 下乙個更大元素 I

給定兩個沒有重複元素的陣列nums1和nums2,其中nums1是nums2的子集。找到nums1中每個元素在nums2中的下乙個比其大的值。nums1中數字x的下乙個更大元素是指x在nums2中對應位置的右邊的第乙個比x大的元素。如果不存在,對應位置輸出 1。示例 1 輸入 nums1 4,1,2...