Leetcode414. 第三大的数

Java实现 LeetCode 414 第三大的数 414. 第三大的数 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3: 输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大... 阅读详情

Every day a leetcode

题目来源:414. 第三大的数

解法1:STL set

set 是一个集合类型的容器,里面的元素具有唯一性,并且所有元素都会根据元素的键值自动被排序,以红黑树为底层数据结构。

我们遍历数组nums,将数组的值插入集合,集合中的数递增且唯一,便于我们找到第三大的数。

代码:

/*
 * @lc app=leetcode.cn id=414 lang=cpp
 *
 * [414] 第三大的数
 */

// @lc code=start
class Solution
{
public:
    int thirdMax(vector<int> &nums)
    {
        set<int> s;
        for (int i = 0; i < nums.size(); i++)
            s.insert(nums[i]);
        set<int>::iterator it = s.end();
        if (s.size() < 3)
            it--;
        else
        {
            it--;
            it--;
            it--;
        }
        return *it;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

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

空间复杂度:O(1)

解法2:排序

将数组从大到小排序后,从头开始遍历数组,通过判断相邻元素是否不同,来统计不同元素的个数。如果能找到三个不同的元素,就返回第三大的元素,否则返回最大的元素。

代码:

class Solution {
public:
    int thirdMax(vector<int> &nums) {
        sort(nums.begin(), nums.end(), greater<>());
        for (int i = 1, diff = 1; i < nums.size(); ++i) {
            if (nums[i] != nums[i - 1] && ++diff == 3) { // 此时 nums[i] 就是第三大的数
                return nums[i];
            }
        }
        return nums[0];
    }
};

复杂度分析:

时间复杂度:O(nlogn),其中n是数组nums的长度。sort的时间复杂度是O(nlogn)。

空间复杂度:O(logn),排序需要的栈空间为O(logn)。

Leetcode 414. 第三大的数(详解 C语言实现) 414. 第三大的数(点击查看原题) 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3: 输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。 存在两个值为2的数,它们都排第二。 解题思路 阅读详情

相关推荐

MATLAB配置MinGW编译器的完整指南

本文提供了在Windows系统上为MATLAB配置MinGW编译器的完整指南。详细介绍了通过MATLAB附加功能管理器在线安装和手动离线安装两种核心方法,并重点说明了如何解决常见的“未找到支持的编译器”等错误。指南包含从版本检查、环境变量配置到最终使用mex命令验证的每一步,帮助用户顺利完成MATLAB与MinGW的集成,以支持C/C++代码编译。

weixin_29031057的博客 265

[Golang]力扣Leetcode - 414. 第三大的数(排序)

[Golang]力扣Leetcode - 414. 第三大的数(排序)

皮埃尔的博客 394

ESP-IDF下载配合MQTT协议接入云平台实例

通过ESP-IDF下载环境搭建,结合MQTT协议实现设备与云平台通信,详解从配置到连接的完整流程,助力物联网应用开发。重点涵盖espidf下载和MQTT集成关键步骤。

weixin_28913879的博客 454

#力扣 LeetCode414. 第三大的数 @FDDLC

题目描述: https://leetcode-cn.com/problems/third-maximum-number/ Java代码: class Solution { //给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。 public int thirdMax(int[] nums) { //要求算法时间复杂度必须是O(n)。 int $1=nums[0],$2=0,$3=0; //$2,$3初始值随意 boolean e.

LiuXingchang的博客 390

【ES】--Elasticsearch的分词器深度研究

分词器是ik_max_word,会将“龙马家书”拆分为“龙马”、“马家”、“家书”。然后filter配置的是edge_ngram_filter,在上面拆分的token词组基础上,按照edge_ngram_filter规则进一步拆分。从结果看:分词器是keyword,filter支持edge_ngram_filter,字符过滤器支持tsconvert【简繁体】。分词器是keyword,表明是不进行分词,但filtet中edge_ngram_filter是按照布长方式拆分token,所以得到如此结果。

寻梦友的博客 2476

Zabbix安装与部署 系统环境:centos7.0

Zabbix安装与部署 系统环境:centos7.0

weixin_42485027的博客 2600

Leetcode414 第三大的数

Leetcode414 第三大的数 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3: 输入: [2, 2, 3, 1] 输出: 1 解释: 注意,...

peony的博客 256

实现两端固支梁热力耦合的有限元分析

在本文中,我们将使用Matlab实现两端固支梁的热力耦合有限元分析。我们假设梁的材料是均匀的,梁的截面积为1,长度为1,两端固支,且受到均匀分布的热荷载。接下来,我们需要组装全局刚度矩阵和热传导矩阵。对于两个相邻的元素,它们共享一个节点,因此需要使用连接矩阵将局部矩阵组装成全局矩阵。接下来,我们需要定义元素刚度矩阵和热传导矩阵。然后,我们需要定义载荷向量。然后,我们需要定义边界条件。在这个例子中,梁的两端固支,因此我们需要将两端节点的位移限制为0。最后,我们需要解决线性方程组,得到节点的位移和温度分布。

CyberSparkZ的博客 397

414. 第三大的数-LeetCode(C++)

每遍历一个数,就将其插入有序集合,若有序集合的大小超过 3,就删除集合中的最小元素。这样可以保证有序集合的大小至多为 3,且遍历结束后,若有序集合的大小为 3,其最小值就是数组中第三大的数;若有序集合的大小不足 3,那么就返回有序集合中的最大值。对于浮点数,C++ 标准库提供了一些宏来表示浮点数类型能表示的最小正规范化值、最大值、和非规范化(非零的最小值)等。容器中的元素是唯一的,并且是自动排序的。中的元素不能重复,如果尝试插入一个已存在的元素,该元素不会被加入到。中的元素是按照升序自动排序的。

woshihlf的博客 1144

第二节:Vben Admin 登录逻辑梳理和对接后端准备

第一节,我们已经配置了前端环境,运行起来了我们的Vben Admin的项目。本节内容,我们先熟悉下项目的目录和文件,然后开始准备对接后端程序路由在 src/router页面在 sr/views本节前端登录逻辑梳理完成了,后端只要在/api/login 接口编写返回逻辑,前后段就可以打通了,具体详情我们下一节介绍。

cuiwin的专栏 5084

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LeetCode414_414. 第三大的数

LeetCode414_414. 第三大的数

luoyepiaoxue2014的博客 912

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

leetcode 414.第三大的数

leetcode 414.第三大的数 题目描述 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3: 输入: [2, 2, 3, 1] 输出: 1...

EngineerHe的博客 789

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python描述 LeetCode 414. 第三大的数

Python描述 LeetCode 414. 第三大的数   大家好,我叫亓官劼(qí guān jié ),在GitHub & 优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在GitHub & 优快云中写博客,唯一博客更新的地址为:亓官劼的博客 ,近期将逐渐同步刷题相关记录到GitHub:Algorithmic-learning-records,大多是本人的刷题记录,如果转载请附上原文地址,谢谢。 由于学习工作的需要,算法刷题将会逐渐由C++向Python3

一起加油 787

力扣【414-第三大数】【数组-C语言】

可以遍历数组,并用三个变量 a、b 和 c 来维护数组中的最大值、次大值和第三大值,以模拟方法二中的插入和删除操作。

一只喜欢code的fox 359

力扣414题:第三大的数

力扣414题:第三大的数

童一的博客 349

Leetcode 414. 第三大的数 C++

Leetcode 414. 第三大的数 题目 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 测试样例 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3: 输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。 存在两个值为2的数,它们都排

weixin_43750513的博客 377

LeetCode 414.第三大的数

题目描述 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3: 输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。 存在两个值为2的数,它们都排第二。 解题思路 题目要求时间复杂度是O(n),所以所有sor

為什麽烏鴉像寫字臺的博客 197

力扣414.第三大的数

给你一个非空数组,返回此数组中。如果不存在,则返回数组中最大的数。[3, 2, 1]1第三大的数是 1。[1, 2]2第三大的数不存在, 所以返回最大的数 2。1注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1。

2502_90980100的博客 196

力扣(leetcode)第414题第三大的数(Python)

最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1。给你一个非空数组,返回此数组中 第三大的数。如果不存在,则返回数组中最大的数。解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。解释:第三大的数不存在, 所以返回最大的数 2。输入:[2, 2, 3, 1]解释:第三大的数是 1。输入:[3, 2, 1]

qq_58737789的博客 685

414.力扣LeetCode_第三大的数

该代码实现了一个查找数组第三大不同元素的函数。使用三个long long变量存储前三大值,初始化为最小值LLONG_MIN以避免与输入值冲突。遍历数组时跳过重复元素,通过比较更新前三大值。最终若存在第三大值则返回,否则返回最大值。该算法时间复杂度为O(n),空间复杂度为O(1),能正确处理包含INT_MIN的输入。

2401_82472941的博客 143

Leetcode 414.第三大的数

Leetcode 414.第三大的数414. 第三大的数 给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。 示例 1: 输入: [3, 2, 1] 输出: 1 解释: 第三大的数是 1. 示例 2: 输入: [1, 2] 输出: 2 解释: 第三大的数不存在, 所以返回最大的数 2 . 示例 3: 输入: [2, 2, 3, 1] 输出: 1 解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。 存在两个值为2的数,它们都排第二。 cla

EIUC_Thread的博客 159

LeetCode第 414 题:第三大的数(C++)

414. 第三大的数 - 力扣(LeetCode) 典型的topk,优先级队列,不过这儿需要处理重复元素,可以使用哈希表自动去重 class Solution { public: int thirdMax(vector<int>& nums) { unordered_set<int> s(nums.begin(), nums.end()); int n = s.size(); if(n < 3) return

zj 453

力扣-414 第三大的数

力扣-414 第三大的数 Code 排序+遍历 class Solution { public: int thirdMax(vector<int>& nums) { sort(nums.begin(),nums.end()); int n = nums.size(); int count = 1; for(int i=n-2;i>=0;i--){ if(nums[i]!=nums[i+1

hero_th的博客 250

leetcode-414.第三大的数

【代码】leetcode-414.第三大的数。

小勇博客 346
上一篇: Leetcode412. Fizz Buzz
下一篇: Leetcode415. 字符串相加
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值