题目:
给你一个整数数组 nums
,其中总是存在 唯一的 一个最大整数 。
请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1
。
法一:通过最大值和次大值的比较,一次遍历。
在最后比较最大值和次大值之间的二倍关系;
class Solution {
public int dominantIndex(int[] nums) {
int n=nums.length;
int one=-1,two=-1,index=-1;
for(int i=0;i<n;i++){
if(nums[i]>one){
two=one;
one=nums[i];
index=i;
}else if(nums[i]>two){
two=nums[i];
}
}return one>=2*two?index:-1;//在最后比较两倍关系。
}
}
法二:两次遍历:找+比较
class Solution {
public int dominantIndex(int[] nums) {
int n=nums.length;
int max=nums[0],index=0;
for(int i=1;i<n;i++){
if(nums[i]>max){
max=nums[i];
index=i;
}
}
Arrays.sort(nums);
for(int i=0;i<n-1;i++){
if(max<2*nums[i])return -1;
}return index;
}
}