leetcode-747:至少是其他数字两倍的最大数

简介: leetcode-747:至少是其他数字两倍的最大数

题目

题目链接

给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。

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

示例 1:

输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。

示例 2:

输入:nums = [1,2,3,4]
输出:-1
解释:4 没有超过 3 的两倍大,所以返回 -1 。

示例 3:

输入:nums = [1]
输出:0
解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。

解题

方法一:两次遍历

1.先找到最大值

2.判断其他值是不是比最大值大。

class Solution {
public:
    int dominantIndex(vector<int>& nums) {
        int maxNum=INT_MIN;
        int maxNumIndex=-1;
        for(int i=0;i<nums.size();i++){
            if(nums[i]>maxNum){
                maxNumIndex=i;
                maxNum=nums[i];
            }
        }
        for(int i=0;i<nums.size();i++){
            if(i!=maxNumIndex&&nums[i]*2>maxNum) return -1;
        }
        return maxNumIndex;
    }
};

方法二:一次遍历(最大的数和第二大的数)

class Solution {
public:
    int dominantIndex(vector<int>& nums) {
        if(nums.size()==1) return 0;
        int a=INT_MIN;//最大的数
        int b=INT_MIN;//第二大的数
        int maxNumIndex=-1;//最大数的索引
        for(int i=0;i<nums.size();i++){
            if(nums[i]>a){//如果该数比最大值大,1.把之前的最大值给第二大的 2.更新最大值和索引
                b=a;
                a=nums[i];
                maxNumIndex=i;
            }
            else if(nums[i]<a&&nums[i]>b){//更新第二大的数
                b=nums[i];
            }
        }
        return b*2>a?-1:maxNumIndex;//比较最大的数和第二大的数
    }
};


相关文章
|
11月前
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
67 0
|
1月前
|
C语言
【Amazon 面试题1】一个数组,里面得数出现的次数是偶数次,只有一个数出现的次数是奇数次,找出那个出现奇数次的数
本文介绍了解决Amazon面试题的一种方法,即在一个所有数字出现次数都是偶数,除了一个数字出现奇数次的数组中,利用异或运算的性质找出出现奇数次的数字,并提供了C语言实现的代码示例。
45 1
|
4月前
|
存储
Leetcode2336 无限集中的最小数字
Leetcode2336 无限集中的最小数字
|
4月前
leetcode-1438:绝对差不超过限制的最长连续子数组
leetcode-1438:绝对差不超过限制的最长连续子数组
40 0
|
4月前
|
存储
leetcode-6113:无限集中的最小数字
leetcode-6113:无限集中的最小数字
37 0
【剑指offer】-数组汇总出现次数超过一半的数字-27/67
【剑指offer】-数组汇总出现次数超过一半的数字-27/67
|
4月前
|
存储 机器学习/深度学习 C语言
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
50 0
|
算法 测试技术 索引
算法创作|至少是其他数字两倍的最大数
算法创作|至少是其他数字两倍的最大数
69 0
剑指offer 40. 数组中出现次数超过一半的数字
剑指offer 40. 数组中出现次数超过一半的数字
69 0
力扣-747. 至少是其他数字两倍的最大数
给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。
75 0