LeetCode_747.至少是其他数字两倍的最大数

题目:至少是其他数字两倍的最大数

在一个给定的数组nums中,总是存在一个最大元素 。
查找数组中的最大元素是否至少是数组中每个其他数字的两倍。
如果是,则返回最大元素的索引,否则返回-1。

思题思路:初看这个题,想到的是先扫描一遍数组,取出最大值和相应角标,再次扫描数组,用最大值和其他值进行比较。

class Solution {
    public int dominantIndex(int[] nums) {
        int max=nums[0];      
        int index=0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]>max){
                max=nums[i];
                index=i;
            }
        }
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=max&&max<(2*nums[i])){
                return -1;
            }
        }
        return index;
    }
}

这思路可行,但是时间复杂度较高。可以做,但没必要,仔细想想,为什么要将最大值和所有元素进行比较呢?可以找到第二大元素,将其值的2倍与最大值进行比较,便可以证明最大值是否大于其余所有元素的2倍。
代码实现

class Solution {
    public int dominantIndex(int[] nums) {
        if(nums.length==1){
            return 0;
        }
        int max=0;    //最大的数
        int index=0;    //最大数的角标
        int secondMax=1;  //第二大数
        for(int i=0;i<nums.length;i++){		//遍历
            if(nums[i]>max){	//比较,取最大值
                secondMax=max;	//每次循环,先将max的值给secondMax
                max=nums[i];	//
                index=i; 
            }else if(nums[i]>secondMax){	
                secondMax=nums[i];
            }
        }
        return max>=(secondMax*2)? index:-1;
    }
}

代码解析:每次循环,先将最大值的值给第二大值,之后再将最大值与其他元素比较,当max取到数组的最大值时,secondMax就取到了max的前一个值,即第二大值,最后三目运算返回结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值