1.題目描述:
給定兩個 沒有重複元素 的陣列 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。
這道題可能不是那麼很好理解。簡單翻譯一下,給定兩個陣列a,b,a是b的子集,在a中從左往右取乙個值,從b中找到該值對應的位置,如果在b中該值右側能找到比該值更大的值,則輸出第乙個更大的值,如果找不到返回-1,最終將值和-1儲存到乙個列表中。運用示例一,nums1中的4,在nums2中的位置是2,右側沒有更大的值返回-1;nums1中的1,在nums2中的位置是0,在右側第乙個最大的值是3,那麼就返回3。
3.程式實現:(python3)
將nums1的值從左往遍歷,在nums2中找到相同的值並返回在nums2中的下標,從該下標+1的位置開始往右遍歷,找到大的值則將第乙個大的值儲存,找不到則返回-1。
class
solution
:def
nextgreaterelement
(self, nums1: list[
int]
, nums2: list[
int])-
> list[
int]
: a=
# 定義乙個空列表用儲存值
for i in
range
(len
(nums1)):
# 將nums1從左至右遍歷
j=nums2.index(nums1[i]
)# 找到nums1中的值在nums2中的下標
for t in
range
(j+1
,len
(nums2)):
# 在nums2中從值nums[i]右側開始遍歷
if nums2[t]
-nums1[i]
>0:
# 如果找到比nums1[i]大的值
)# 將大的值nums[j]存到a中
break
# 只儲存第乙個大的值,找到後跳出當前迴圈
else
:# 沒有找到-1
)# 將-1新增到a中
return a # 返回列表a
執行用時:96 ms, 在所有 python3 提交中擊敗了30.38%的使用者4.for…else…的用法:記憶體消耗:13.4 mb, 在所有 python3 提交中擊敗了61.33%的使用者
for…else用法目前只在python中見過,以前是在看書的時候見過,這次做題憑著自己的理解試著用了一下。for…else…就相當於if…else…。對於帶有else子句的迴圈結構,如果迴圈因為條件表示式不成立或者序列遍歷結束而自然結束時執行else結構中的語句,如果迴圈是因為執行了break語句而導致迴圈提前結束則不會執行else中的語句。所以不止有for…else…還有while…else…。
具體用法可以參考題程式。
年薪百萬小分隊(人工智慧方向)
下乙個更大元素 I
給定兩個 沒有重複元素 的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙個比 x 大的元素。如果不存在,對應位置輸出 ...
LeetCode 下乙個更大元素 I
給定兩個沒有重複元素的陣列nums1和nums2,其中nums1是nums2的子集。找到nums1中每個元素在nums2中的下乙個比其大的值。nums1中數字x的下乙個更大元素是指x在nums2中對應位置的右邊的第乙個比x大的元素。如果不存在,對應位置輸出 1。示例 1 輸入 nums1 4,1,2...
NCSTOJ 下乙個更大元素 I
description leetcode 496 給定兩個沒有重複元素的陣列 nums1 和 nums2 其中nums1 是 nums2 的子集。找到 nums1 中每個元素在 nums2 中的下乙個比其大的值。nums1 中數字 x 的下乙個更大元素是指 x 在 nums2 中對應位置的右邊的第乙...