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

本文探讨了如何在整数数组中找出是否存在一个元素,该元素至少是数组中其他所有元素值的两倍。通过查找最大元素并比较其是否至少为次大元素的两倍,来决定返回该元素的索引还是-1。文章提供了详细的算法实现步骤及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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:

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:

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:

nums will have a length in the range [1, 50].

Every nums[i] will be an integer in the range [0, 99]   

 

题意:找出数组中的最大元素,判断这个数是否至少是数组中其它元素的两倍,如果没有这样的元素,返回-1。                                           

思路:找到最大元素,保存其下标,然后对数组排序,找到第二大的数,两个数作比较,如果最大的元素大于或者等于第二大元素的二倍,那么肯定也就大于其余元素的二倍,如果是小于的话,那就返回-1。

class Solution {
public:
    //找到最大数的id,然后排序和第二大的数比较,如果比它还大,那就返回最大数的id
    int dominantIndex(vector<int>& nums) {
        int len=nums.size();
        int max=0;
        int id=0;
        for(int i=0;i<len;i++){
            if(nums[i]>max){
                max=nums[i];
                id=i;
            }
        }
        sort(nums.begin(),nums.end());  //对vector进行排序
        if(max<nums[len-2]*2) id=-1;
        return id;    
    }
};

 

转载于:https://www.cnblogs.com/Bipolard/p/9988042.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值