747. Largest Number At Least Twice of Others
747.Largest Number At Least Twice of Others
這一題是一個簡單的題目,解題的主要邏輯:
- 遍歷整個陣列一次並找出最大值,同時紀錄位置在哪。
- 再次遍歷整個陣列,並確保所有的數字的兩倍數值,都不會大於自己,並且根據題目所描述,由於最大值題目有說只會有一個,所以遍歷時可以利用當前的指針和紀錄的位置,或是當前的值與最大值相比,當條件符合時,可以略過檢查。
- 當前值兩倍大於最大值的時候,可以直接回傳 -1
class Solution:
def dominantIndex(self, nums: List[int]) -> int:
m = float('-inf')
idx = -1
for i in range(len(nums)):
if nums[i] >= m:
m = nums[i]
idx = i
for num in nums:
if num == m:
continue
if m < num * 2:
return -1
return idx
這題可以挑戰的解法為,是否可以在一個 for 迴圈結束時,及收集算所有的資訊。
class Solution:
def dominantIndex(self, nums: List[int]) -> int:
if not nums:
return -1
m = float('-inf')
idx = -1
rest = float('-inf')
for i in range(len(nums)):
if nums[i] >= m:
rest = max(rest, m * 2)
m = nums[i]
idx = i
else:
rest = max(rest, nums[i] * 2)
if m >= rest:
return idx
else:
return -1