算法現在就是大廠、外企的硬指標。開發、測開、測試,想往上總是繞不開的。
這是今天的每日一題,看到是個簡單的,就做了下(非官方題解)。
題目描述
難度:【簡單】 標籤:【數組】、【排序】
給你一個整數數組 nums ,其中總是存在 唯一的 一個最大整數 。
請你找出數組中的最大元素並檢查它是否 至少是數組中每個其他數字的兩倍 。
如果是,則返回 最大元素的下標 ,否則返回 -1 。
題目地址:https://leetcode-cn.com/problems/largest-number-at-least-twice-of-others/
示例
示例 1
輸入:nums = [3,6,1,0]
輸出:1
解釋:6 是最大的整數,對於數組中的其他整數,6 大於數組中其他元素的兩倍。6 的下標是 1 ,所以返回 1 。
示例 2
輸入:nums = [1,2,3,4]
輸出:-1
解釋:4 沒有超過 3 的兩倍大,所以返回 -1 。
示例 3
輸入:nums = [1]
輸出:0
解釋:因爲不存在其他數字,所以認爲現有數字 1 至少是其他數字的兩倍。
解題
因爲總是存在 唯一的 一個最大整數
,於是我首先找出數組裏的最大的數,記錄下來這個數。
然後遍歷數組,逐個比較。
至少是數組中每個其他數字的兩倍
,就是說當2 * i > max_num
,就返回 -1 結束。
後來提交報錯,發現忽略一個問題,就是當遍歷到最大數本身的時候是滿足上述的比較條件的,返回 -1 。
所以我增加了一步,不僅記錄下最大的數,還記錄了最大數的下標,然後 remove 了這個最大數,接着遍歷即可。
全部遍歷完成沒有中途返回 -1,則返回最大數的下標。
class Solution:
def dominantIndex(self, nums: List[int]) -> int:
max_num = max(nums)
index_max = nums.index(max_num)
nums.remove(max_num)
for i in nums:
if 2 * i > max_num:
return -1
return index_max