747.至少是其他数字两倍的最大数
链接:747.至少是其他数字两倍的最大数
难度:Easy
标签:数组、排序
简介:给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。
题解 1 - cpp
- 编辑时间:2022-01-13
- 执行用时:4ms
- 内存消耗:10.5MB
- 编程语言:cpp
- 解法介绍:遍历两次,第一次记录最大值,第二次判断其他值的两倍是否超过最大值。
class Solution {
   public:
    int dominantIndex(vector<int>& nums) {
        int maxn = INT_MIN, maxi;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] > maxn) {
                maxn = nums[i];
                maxi = i;
            }
        }
        for (auto& num : nums) {
            if (num != maxn && num * 2 > maxn) return -1;
        }
        return maxi;
    }
};
题解 2 - cpp
- 编辑时间:2022-01-13
- 执行用时:8ms
- 内存消耗:10.7MB
- 编程语言:cpp
- 解法介绍:排序。
class Solution {
   public:
    int dominantIndex(vector<int>& nums) {
        int n = nums.size();
        if (n == 1) return 0;
        int arr[n];
        for (int i = 0; i < n; i++) arr[i] = i;
        sort(arr, arr + n,
             [&](int i1, int i2) -> bool { return nums[i1] < nums[i2]; });
        return nums[arr[n - 1]] >= nums[arr[n - 2]] * 2 ? arr[n - 1] : -1;
    }
};