每日一题(2022-01-13):至少是其他数字两倍的最大数

每日一题(2022-01-13):至少是其他数字两倍的最大数

来源:力扣
难度:简单
题目:747.至少是其他数字两倍的最大数

题目详情

原题截图.png

题解思路

简单题目就应该重拳出击
但是这道题目也没什么可以小题大做的点,但凡稍微有点经验就应该意识到这题目需要时间复杂度O(N)和空间复杂度O(1)的算法;
唯一的难点可能在于对示例3所示的只有一个数字的特殊情况进行处理,因为这涉及到变量初始值的设置:

  • 题干中提到数组中的元素不会小于0,所以就可以将用于存储最大值和次大值的变量初始化为-1,;
  • 重点在于次大值,初始化为0也是可以的,因为2 * 0 = 0,同样也是数组元素范围的最小边界,与2 * -1 = -2这种小于最小边界的作用相同;

代码结果

class Solution {
public:
    int dominantIndex(vector<int>& nums) {
        int iIdxMaxNum = 0;
        int iMaxNum = nums[0], iSubMaxNum = 0;
        for (int i = 1; i < nums.size(); ++i)
            if (nums[i] > iMaxNum)
            {
                iSubMaxNum = iMaxNum;
                iMaxNum = nums[i];
                iIdxMaxNum = i;
            }
            else if (nums[i] > iSubMaxNum)
                iSubMaxNum = nums[i];
        return iMaxNum >= 2 * iSubMaxNum ? iIdxMaxNum : -1;
    }
};

运行结果.png