Largest Number At Least Twice of Others

easy array scan

Problem

Given an integer array, return the index of the largest element if it is at least twice as large as every other number, otherwise return -1.

Inputnums=[3,6,1,0]
Output1
6 is at index 1 and is at least double every other entry.

def dominantIndex(nums):
    best = second = -1
    best_i = -1
    for i, v in enumerate(nums):
        if v > best:
            second = best; best = v; best_i = i
        elif v > second:
            second = v
    return best_i if best >= 2 * second else -1
function dominantIndex(nums) {
  let best = -1, second = -1, bi = -1;
  for (let i = 0; i < nums.length; i++) {
    const v = nums[i];
    if (v > best) { second = best; best = v; bi = i; }
    else if (v > second) second = v;
  }
  return best >= 2 * second ? bi : -1;
}
class Solution {
  public int dominantIndex(int[] nums) {
    int best = -1, second = -1, bi = -1;
    for (int i = 0; i < nums.length; i++) {
      int v = nums[i];
      if (v > best) { second = best; best = v; bi = i; }
      else if (v > second) second = v;
    }
    return best >= 2 * second ? bi : -1;
  }
}
class Solution {
public:
  int dominantIndex(vector<int>& nums) {
    int best = -1, second = -1, bi = -1;
    for (int i = 0; i < (int)nums.size(); i++) {
      int v = nums[i];
      if (v > best) { second = best; best = v; bi = i; }
      else if (v > second) second = v;
    }
    return best >= 2 * second ? bi : -1;
  }
};
Time: O(n) Space: O(1)