Skip to content

Latest commit

 

History

History

0747.Largest Number At Least Twice of Others

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English Version

题目描述

在一个给定的数组nums中,总是存在一个最大元素 。

查找数组中的最大元素是否至少是数组中每个其他数字的两倍。

如果是,则返回最大元素的索引,否则返回-1。

示例 1:

输入: nums = [3, 6, 1, 0]
输出: 1
解释: 6是最大的整数, 对于数组中的其他整数,
6大于数组中其他元素的两倍。6的索引是1, 所以我们返回1.

 

示例 2:

输入: nums = [1, 2, 3, 4]
输出: -1
解释: 4没有超过3的两倍大, 所以我们返回 -1.

 

提示:

  1. nums 的长度范围在[1, 50].
  2. 每个 nums[i] 的整数范围在 [0, 100].

解法

遍历数组找到最大值和次大值,最后判断是否满足条件即可。

Python3

class Solution:
    def dominantIndex(self, nums: List[int]) -> int:
        mx = mid = 0
        ans = -1
        for i, v in enumerate(nums):
            if v > mx:
                mid, mx = mx, v
                ans = i
            elif v > mid:
                mid = v
        return ans if mx >= 2 * mid else -1

Java

class Solution {
    public int dominantIndex(int[] nums) {
        int mx = 0, mid = 0;
        int ans = -1;
        for (int i = 0; i < nums.length; ++i) {
            if (nums[i] > mx) {
                mid = mx;
                mx = nums[i];
                ans = i;
            } else if (nums[i] > mid) {
                mid = nums[i];
            }
        }
        return mx >= mid * 2 ? ans : -1;
    }
}

C++

class Solution {
public:
    int dominantIndex(vector<int>& nums) {
        int mx = 0, mid = 0;
        int ans = 0;
        for (int i = 0; i < nums.size(); ++i)
        {
            if (nums[i] > mx)
            {
                mid = mx;
                mx = nums[i];
                ans = i;
            }
            else if (nums[i] > mid) mid = nums[i];
        }
        return mx >= mid * 2 ? ans : -1;
    }
};

Go

func dominantIndex(nums []int) int {
	mx, mid := 0, 0
	ans := 0
	for i, v := range nums {
		if v > mx {
			mid, mx = mx, v
			ans = i
		} else if v > mid {
			mid = v
		}
	}
	if mx >= mid*2 {
		return ans
	}
	return -1
}

JavaScript

/**
 * @param {number[]} nums
 * @return {number}
 */
var dominantIndex = function (nums) {
    let mx = 0,
        mid = 0;
    let ans = 0;
    for (let i = 0; i < nums.length; ++i) {
        if (nums[i] > mx) {
            mid = mx;
            mx = nums[i];
            ans = i;
        } else if (nums[i] > mid) {
            mid = nums[i];
        }
    }
    return mx >= mid * 2 ? ans : -1;
};

...