前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-747-Largest Number At Least Twice of Others(求vector的最大值和次大值)

leetcode-747-Largest Number At Least Twice of Others(求vector的最大值和次大值)

作者头像
chenjx85
发布2018-05-21 18:22:30
6700
发布2018-05-21 18:22:30
举报

题目描述:

In a given integer array nums, there is always exactly one largest element.

Find whether the largest element in the array is at least twice as much as every other number in the array.

If it is, return the index of the largest element, otherwise return -1.

Example 1:

代码语言:javascript
复制
Input: nums = [3, 6, 1, 0]
Output: 1
Explanation: 6 is the largest integer, and for every other number in the array x,
6 is more than twice as big as x.  The index of value 6 is 1, so we return 1.

Example 2:

代码语言:javascript
复制
Input: nums = [1, 2, 3, 4]
Output: -1
Explanation: 4 isn't at least as big as twice the value of 3, so we return -1.

Note:

  1. nums will have a length in the range [1, 50].
  2. Every nums[i] will be an integer in the range [0, 99].

要完成的函数:

int dominantIndex(vector<int>& nums) 

说明:

给定一个vector,要求判断这个vector中的最大值是不是至少等于其他所有元素值的两倍,如果是的话,返回最大值的位置,如果不是,返回-1。

这道题其实相当容易,就是求vector的最大值和次大值,以及在求最大值的过程中记录一下最大值的位置。

我们考虑一下边界条件,只有一个元素和只有两个元素的情况,接着构造一般情况下的代码,如下:

代码语言:javascript
复制
   int dominantIndex(vector<int>& nums) 
    {
        int s1=nums.size();
        if(s1==1)//只有一个元素的边界条件
            return 0;
        else if(s1==2)//只有两个元素的边界条件
        {
            if(nums[0]>nums[1])
            {
                if(nums[0]>=2*nums[1])
                    return 0;
                else
                    return -1;
            }
            else
            {
                if(nums[1]>=2*nums[0])
                    return 1;
                else
                    return -1;
            }
        }
        int max1,max2,i=2,index;
        if(nums[0]>=nums[1])
        {
            max1=nums[0];
            max2=nums[1];
            index=0;
        }
        else
        {
            max1=nums[1];
            max2=nums[0];
            index=1;
        }
        while(i<s1)//i从2开始
        {
            if(nums[i]>=max1)
            {
                max2=max1;
                max1=nums[i];
                index=i;
            }
            else
            {
                if(nums[i]>=max2)
                    max2=nums[i];
            }
            i++;
        }
        if(max1>=2*max2)
            return index;
        else
            return -1;
    }

上述代码虽然条件判断语句多了点,但大体上来看没有浪费很多时间,代码也不难理解。

实测9ms,beats 81.63% of cpp submissions。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档