題目描述:
至少是其他數字兩倍的最大數:
在一個給定的數組nums中,總是存在一個最大元素 。
查找數組中的最大元素是否至少是數組中每個其他數字的兩倍。
如果是,則返回最大元素的索引,否則返回-1。
nums 的長度范圍在[1, 50].
每個 nums[i] 的整數范圍在 [0, 99].
思路1:
先假定首位數是符合條件的最大元素,index=0,maxNum=nums[0]。
然后對之后的元素做如下判斷:
nums[i]的各種情況及對應變量更新
c++實現:
class Solution {
public:
int dominantIndex(vector<int>& nums) {
int index = 0;
int maxNum = nums[0];
for (int i=1;i<nums.size();i++)
{
if (nums[i] <= maxNum/2) continue;
else if (nums[i] >= 2*maxNum)
{
index = i;
maxNum = nums[i];
}
else if (nums[i] > maxNum)
{
index = -1;
maxNum = nums[i];
}
else index = -1;
}
return index;
}
};
思路2:
遍歷數組得到兩個變量值:最大數,次大數,最后判斷最大數是否大于等于次大數的兩倍。
實現:
class Solution {
public:
int dominantIndex(vector<int>& nums) {
int index = 0;
int maxNum = nums[0];
int secondNum = 0;
for (int i=1;i<nums.size();i++)
{
if (nums[i] > maxNum)
{
index = i;
secondNum = maxNum;
maxNum = nums[i];
}
else if (nums[i] > secondNum)
secondNum = nums[i];
}
if (maxNum >= 2*secondNum) return index;
else return -1;
}
};