題目:給定兩個沒有重複元素的陣列 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。示例一nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出-1。
輸入: nums1 = [4,1,2], nums2 = [1,3,4,2].注意:nums1和nums2中所有元素是唯一的。輸出: [-1,3,-1]
解釋:對於num1中的數字4,你無法在第二個陣列中找到下乙個更大的數字,因此輸出 -1。
對於num1中的數字1,第二個陣列中數字1右邊的下乙個較大數字是 3。
對於num1中的數字2,第二個陣列中沒有下乙個更大的數字,因此輸出 -1。
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...