📌  相关文章
📜  数组中的最大值,至少是其他元素的两倍(1)

📅  最后修改于: 2023-12-03 15:10:21.990000             🧑  作者: Mango

数组中的最大值,至少是其他元素的两倍

对于一个整数类型的数组 nums,如果存在一个数 val,满足 val 大于等于数组中的每个其他元素的两倍,则称 val 是数组中的最大元素。

给定一个整数类型的数组 nums,编写一个函数 dominantIndex 来判断它是否存在一个数 val,满足 val 是数组中的最大元素。如果存在,返回 val 的下标,否则返回 -1

示例1:

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

示例2:

输入:nums = [1, 2, 3, 4]
输出:-1
解释:4 不是数组中最大的整数,3 是它的两倍,但是 3 并不大于其他所有元素中的最大值,所以我们不能确定 4 是否符合条件。因此,我们返回 -1。

解题思路:

  1. 首先找到数组中最大的数maxNum
  2. 遍历整个数组,如果一旦发现存在一个数不满足大于等于其他数的两倍,直接返回-1
  3. 如果遍历完成都没有找到不满足条件的数,则返回maxNum在数组中的下标

Java代码:

public class Solution {
    public int dominantIndex(int[] nums) {
        if (nums == null || nums.length == 0) {
            return -1;
        }

        int maxNum = nums[0];
        int maxIndex = 0;

        for (int i = 1; i < nums.length; i++) {
            if (nums[i] > maxNum) {
                maxNum = nums[i];
                maxIndex = i;
            }
        }

        for (int i = 0; i < nums.length; i++) {
            if (i != maxIndex && nums[i] * 2 > maxNum) {
                return -1;
            }
        }

        return maxIndex;
    }
}

Python代码:

class Solution:
    def dominantIndex(self, nums: List[int]) -> int:
        if not nums:
            return -1

        max_num = max(nums)
        max_index = nums.index(max_num)

        for i, n in enumerate(nums):
            if i != max_index and n * 2 > max_num:
                return -1

        return max_index

时间复杂度:O(n),其中n是数组的长度。 空间复杂度:O(1)。