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;//比较最大的数和第二大的数
    }
};


相关文章
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
79 0
|
8月前
|
算法 Java
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
77 0
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
|
8月前
leetcode-1438:绝对差不超过限制的最长连续子数组
leetcode-1438:绝对差不超过限制的最长连续子数组
52 0
【剑指offer】-数组汇总出现次数超过一半的数字-27/67
【剑指offer】-数组汇总出现次数超过一半的数字-27/67
|
8月前
|
存储 机器学习/深度学习 C语言
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
67 0
|
算法 测试技术 索引
算法创作|至少是其他数字两倍的最大数
算法创作|至少是其他数字两倍的最大数
76 0
剑指offer 40. 数组中出现次数超过一半的数字
剑指offer 40. 数组中出现次数超过一半的数字
86 0
|
索引
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
139 0
力扣刷题记录——748. 最短补全词、744. 寻找比目标字母大的最小字母、747. 至少是其他数字两倍的最大数
力扣-747. 至少是其他数字两倍的最大数
给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。
86 0
刷爆力扣之至少是其它数字两倍的最大数
刷爆力扣之至少是其它数字两倍的最大数

热门文章

最新文章

下一篇
开通oss服务