首页 > 其他分享 >LeetCode 747. 至少是其他数字两倍的最大数

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

时间:2025-01-07 17:31:04浏览次数:3  
标签:元素 最大数 nums int 747 maxIndex element 数组 LeetCode

问题描述

给定一个整数数组 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),我们只使用了有限的额外空间。

结论

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

 

标签:元素,最大数,nums,int,747,maxIndex,element,数组,LeetCode
From: https://blog.csdn.net/makeke123456/article/details/144990028

相关文章

  • leetcode 热题100(32. 最长有效括号)栈 c++
    链接:32.最长有效括号-力扣(LeetCode)给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例1:输入:s="(()"输出:2解释:最长有效括号子串是"()"示例2:输入:s=")()())"输出:4解释:最长有效括号子串是"()()"示例3:输入:s=""......
  • Leetcode 3414. Maximum Score of Non-overlapping Intervals
    Leetcode3414.MaximumScoreofNon-overlappingIntervals1.解题思路2.代码实现题目链接:3414.MaximumScoreofNon-overlappingIntervals1.解题思路这一题算是一个比较常规的动态规划的题目吧。首先,我们将所有的区间进行排序,然后考察每一个区间是否选择的情......
  • 1384. 按年度列出销售总额 - 力扣(LeetCode)
    1384.按年度列出销售总额-力扣(LeetCode)目标输入Sales表:product_idperiod_startperiod_endaverage_daily_sales12019/1/252019/2/2810022018/12/12020/1/11032019/12/12020/1/311Product表:product_idproduct_name1LCPhone2LCT-Shirt3LCKeychain输出输出product......
  • 1651. Hopper 公司查询 III - 力扣(LeetCode)
    1651.Hopper公司查询III-力扣(LeetCode)目标输入表:AcceptedRidesride_iduser_idrequested_at6752019/12/91542020/2/910632020/3/419392020/4/63412020/6/313522020/6/227692020/7/1617702020/8/2520812020/11/25572020/11/92422020/12/911682021/1/1115322021/1/1712......
  • 1645. Hopper 公司查询 II - 力扣(LeetCode)
    1645.Hopper公司查询II-力扣(LeetCode)目标输入表Rides:ride_iduser_idrequested_at6752019/12/91542020/2/910632020/3/419392020/4/63412020/6/313522020/6/227692020/7/1617702020/8/2520812020/11/25572020/11/92422020/12/911682021/1/1115322021/1/1712112021/......
  • LeetCode题练习与总结:检测大写字母--520
    一、题目描述我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 "USA" 。单词中所有字母都不是大写,比如 "leetcode" 。如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 fals......
  • LeetCode题练习与总结:最长特殊序列 Ⅰ -- 521
    一、题目描述给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  的长度。如果不存在,则返回 -1 。「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。字符串 s 的子序列是在从 s 中删除任意数量的字符后......
  • leetcode(hot100)6、7
    解题思路:先排序再利用双指针思想然后再去重处理。去重要nums[i]==nums[i-1]考虑-1,-1,2这种情况。classSolution{public:vector<vector<int>>threeSum(vector<int>&nums){sort(nums.begin(),nums.end());vector<vector<int>>r......
  • leetcode(hot100)5
    解题思路:(感觉用到了贪心)双指针思想,首先计算当前面积,然后更新最大容量。移动指针的条件就是当左边高度小于右边了就左指针向右移反之右指针向左移。(因为我们想尝试找到更高的线段以可能增加容量。)移动指针:比较两指针所指的高度:如果左侧高度height[i]小于右侧高度hei......
  • leetcode(hot100)4
    解题思路:双指针思想利用两个for循环,第一个for循环把所有非0的全部移到前面,第二个for循环将指针放在非0的末尾全部加上0。还有一种解法就是利用while循环双指针条件,当不为0就两个指针一起移动,为0就只移动右指针。不为0时交换左右数值,为0就不交换了。(如果数组没有0,那么快慢......