【LeetCode】747. 至少是其他數字兩倍的最大數

算法現在就是大廠、外企的硬指標。開發、測開、測試,想往上總是繞不開的。

這是今天的每日一題,看到是個簡單的,就做了下(非官方題解)。

題目描述

難度:【簡單】 標籤:【數組】、【排序】

給你一個整數數組 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章