zoukankan      html  css  js  c++  java
  • 至少是其他数字两倍的最大数

     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;    
        }
    };
  • 相关阅读:
    树形DP,最大直径,并查集——HDU4514
    树形DP——HDU2196
    树上倍增法,LCA——CF-832-D
    LCA,Tarjan——POJ1330
    树的直径,树形DP,DFS——POJ1958
    剑指offer28-最小k个数
    剑指offer27-数组中出现次数超过一半的数字
    剑指offer26-字符串的排列
    剑指offer25-二叉搜索树与双向链表
    剑指offer24-复杂链表的复制
  • 原文地址:https://www.cnblogs.com/Bipolard/p/9988042.html
Copyright © 2011-2022 走看看