LeetCode 747. 至少是其他数字两倍的最大数

问题描述

给定一个整数数组 nums,其中总是存在唯一的一个最大整数。任务是找出数组中的最大元素,并检查它是否至少是数组中每个其他数字的两倍。如果是,则返回最大元素的下标;否则,返回 -1

解题思路

这个问题可以通过两个主要步骤解决:

  1. 寻找最大元素及其下标:首先,我们需要遍历数组以找到最大元素及其下标。

  2. 验证条件:然后,我们需要检查这个最大元素是否至少是数组中其他每个元素的两倍。

算法实现

以下是使用 C++ 语言实现的算法:

复制代码
#include <vector>

public:
    int dominantIndex(std::vector<int>& nums) {
        int maxIndex = 0;
        int n = nums.size();
        
        // Step 1: Find the maximum element and its index
        for (int i = 1; i < n; i++) {
            if (nums[i] > nums[maxIndex]) {
                maxIndex = i;
            }
        }
        
        // Step 2: Check if the maximum element is at least twice of any other element
        for (int i = 0; i < n; i++) {
            if (i != maxIndex && nums[maxIndex] < nums[i] * 2) {
                return -1; // Condition not met
            }
        }
        
        return maxIndex; // Condition met, return the index of the maximum element
    }
};

代码分析

  • 时间复杂度 :O(n),其中 n 是数组 nums 的长度。这是因为我们遍历数组两次:一次寻找最大元素,一次验证条件。

  • 空间复杂度:O(1),我们只使用了有限的额外空间。

结论

这个问题是一个典型的数组问题,它要求我们首先找到数组中的最大元素,然后进行条件验证。通过这个例子,我们可以看到,有时候解决问题的关键在于正确地分解问题并逐步解决每个子问题。

相关推荐
No0d1es12 分钟前
电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
c语言·c++·算法·青少年编程·电子学会·五级
DjangoJason2 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
大阳1232 小时前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
Swift社区2 小时前
Swift 实战:实现一个简化版的 Twitter(LeetCode 355)
leetcode·swift·twitter
weixin_307779133 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法
学行库小秘4 小时前
ANN神经网络回归预测模型
人工智能·python·深度学习·神经网络·算法·机器学习·回归
没落之殇4 小时前
基于C语言实现的HRV分析方法 —— 与Kubios和MATLAB对比
算法
FPGA4 小时前
探讨4B/5B编码、8B/10B编码区别以及FPGA实现
数据结构
秋难降4 小时前
线段树的深度解析(最长递增子序列类解题步骤)
数据结构·python·算法
楚韵天工4 小时前
基于GIS的无人机模拟飞行控制系统设计与实现
深度学习·算法·深度优先·无人机·广度优先·迭代加深·图搜索算法