1. 题目描述

给你一个整数数组nums,其中总是存在 唯一的 一个最大整数 。

请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1

示例 1:

输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1

示例 2:

输入:nums = [1,2,3,4]
输出:-1
解释:4 没有超过 3 的两倍大,所以返回 -1

示例 3:

输入:nums = [1]
输出:0
解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。

2. 算法思路

寻找第二大的元素,比较最大元素和第二大元素的两倍即可。

class Solution {
public:
int dominantIndex(vector<int>& nums) {
if (nums.size() == 1) return 0;
int max = 0x80000000, sec = 0x80000000;
int index;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] > max) {
sec = max; max = nums[i]; index = i;
}
else if (nums[i] > sec)
sec = nums[i];
}
return max >= (sec << 1) ? index : -1;
}
};

算法复杂度

  • 时间复杂度:仅一次循环遍历数组,复杂度为
  • 空间复杂度: