747. 至少是其他数字两倍的最大数
难度:简单
题目:
给你一个整数数组 nums ,其中总是 存在 唯一的 一个最大整数 。
请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。
思路:
先判断初始数组的长度,有示例可知,当长度为≤1时,返回0。
当长度>1时,先比较nums[0]和nums[1]的大小,并存储index,然后从下标为0开始遍历数据,存储最大值和次大值以及index,遍历结束后检查最大值是否是次大值的两倍以上,如果是则返回最大值的下标。
因为只需要额外开辟三个数据的存储空间所以,空间复杂度为O(1),
因为每个数据都要遍历,所以时间复杂度为O(n)。
代码:
var dominantIndex = function(nums) {
if(nums.length <=1){
return 0
}
var largest = nums[0] > nums[1] ? nums[0] : nums[1]
var index = nums[0] > nums[1] ? 0 : 1
var seclargest = nums[0] > nums[1] ? nums[1] : nums[0]
for(let i = 2 ; i < nums.length ; i++){
if(nums[i] > largest && nums[i] > seclargest){
seclargest = largest
largest = nums[i]
index = i
}else if(nums[i] < largest && nums[i] > seclargest){
seclargest = nums[i]
}else if(nums[i] < seclargest){
continue
}
}
if(largest >= seclargest * 2){
return index
}else{
return -1
}
};