题目描述:
至少是其他数字两倍的最大数:
在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。
nums 的长度范围在[1, 50].
每个 nums[i] 的整数范围在 [0, 99].
思路1:
先假定首位数是符合条件的最大元素,index=0,maxNum=nums[0]。
然后对之后的元素做如下判断:
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;
}
};