欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-08 08:27:22
...

flag

软件学院大三党,每天一道算法题,第33天

题目介绍

在一个给定的数组nums中,总是存在一个最大元素 。

查找数组中的最大元素是否至少是数组中每个其他数字的两倍。

如果是,则返回最大元素的索引,否则返回-1。

至少是其他数字两倍的最大数
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number-at-least-twice-of-others

思路

首先找到数组里最大的数字,并记下它的index
然后找到数组里第二大的数字:我们将数组中最大数字改成Integer.MinValue,这样遍历一次就能找到第二大的数字,相当于删除了最大数字
将最大数字与第二大数字的二倍进行比较

关键代码

    public static int dominantIndex(int[] nums){
        if(nums.length==1)
            return 0;
        int maxIndex=0;
        int secondMaxNum=Integer.MIN_VALUE;
        int maxNum=Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++){
            if(nums[i]>maxNum){
                maxNum=nums[i];
                maxIndex=i;
            }
        }
        nums[maxIndex]=Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++){
            if(nums[i]>secondMaxNum){
                secondMaxNum=nums[i];
            }
        }
        if(secondMaxNum*2<=maxNum)
            return maxIndex;
        else return -1;
    }

总结

这道题还是不要用排序了,因为完全可以在O(N)的时间复杂度完成,排序会增加时间复杂度。

相关标签: java 算法