flag
軟件學院大三黨,每天一道算法題,第33天
題目介紹
在一個給定的數組nums中,總是存在一個最大元素 。
查找數組中的最大元素是否至少是數組中每個其他數字的兩倍。
如果是,則返回最大元素的索引,否則返回-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)的時間複雜度完成,排序會增加時間複雜度。