每日一题分享(二)

发布于:2023-01-09 ⋅ 阅读:(426) ⋅ 点赞:(0)

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

在这里插入图片描述

分析:
一,初步分析
1,我们先遍历数组找到最大的整数。
2,然后比较最大的数是不是比任何一个数的二倍都要大。
二,优化

初步分析中我们到达最大的数后还要遍历一遍数组,看是否最大的数比其他任何数据的二倍还要大,那我们可不可以只遍历一次就可以呢?

答案是可以的,我们只要在第一次遍历数组的时候找到最大值同时找到第二大的数据就可以了,因为只要最大的数是第二大的数据二倍以上的话,那么其他数据一定也是可以的。

解法:

int dominantIndex(int* nums, int numsSize)
{
    int ret=0;
    int smax=0;
    if(nums==NULL)
        return -1;
    if(numsSize==1)
        return 0;
    if(numsSize>=2)
    {
        int max=nums[0];
        int i=0;
        for(i=0;i<numsSize;i++)
        {
            if(nums[i]>max)
                {
                    smax=max;
                    max=nums[i];
                    ret=i;
                }
            else if(i>0)
                {
                    if(nums[i]>smax)
                        smax=nums[i];
                }
            
        }
        if(smax==0||max/smax>=2)
            return ret;
        
    }
    return -1;
}

网站公告

今日签到

点亮在社区的每一天
去签到