(LeetCode#747) 至少是其他数字两倍的最大数

题目描述:

至少是其他数字两倍的最大数:
在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。
nums 的长度范围在[1, 50].
每个 nums[i] 的整数范围在 [0, 99].

思路1:

先假定首位数是符合条件的最大元素,index=0,maxNum=nums[0]。
然后对之后的元素做如下判断:


(LeetCode#747) 至少是其他数字两倍的最大数_第1张图片
nums[i]的各种情况及对应变量更新

c++实现:

class Solution {
public:
    int dominantIndex(vector& nums) {
        int index = 0;
        int maxNum = nums[0];
        for (int i=1;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& nums) {
        int index = 0;
        int maxNum = nums[0];
        int secondNum = 0;
        for (int i=1;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;
    }
};

你可能感兴趣的:((LeetCode#747) 至少是其他数字两倍的最大数)