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

题目描述:

至少是其他数字两倍的最大数:
在一个给定的数组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;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。