跳到主要内容

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;
}
};