至少是其他數字兩倍的最大數

flag

軟件學院大三黨,每天一道算法題,第33天

題目介紹

在一個給定的數組nums中,總是存在一個最大元素 。

查找數組中的最大元素是否至少是數組中每個其他數字的兩倍。

如果是,則返回最大元素的索引,否則返回-1。

1
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/largest-number-at-least-twice-of-others

思路

首先找到數組裏最大的數字,並記下它的index
然後找到數組裏第二大的數字:我們將數組中最大數字改成Integer.MinValue,這樣遍歷一次就能找到第二大的數字,相當於刪除了最大數字
將最大數字與第二大數字的二倍進行比較

關鍵代碼

    public static int dominantIndex(int[] nums){
        if(nums.length==1)
            return 0;
        int maxIndex=0;
        int secondMaxNum=Integer.MIN_VALUE;
        int maxNum=Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++){
            if(nums[i]>maxNum){
                maxNum=nums[i];
                maxIndex=i;
            }
        }
        nums[maxIndex]=Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++){
            if(nums[i]>secondMaxNum){
                secondMaxNum=nums[i];
            }
        }
        if(secondMaxNum*2<=maxNum)
            return maxIndex;
        else return -1;
    }

總結

這道題還是不要用排序了,因爲完全可以在O(N)的時間複雜度完成,排序會增加時間複雜度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章