题目:414. Third Maximum Numbe
题目主题:Array, Sorting
我会从最基本的排序开始,本题先不讲任何演算法或资料结构。但我想在今天的这个题目来分享一下,我平常做题目时常使用介面上哪些区块。
做题目的介面如下图:
基本的操作不多做说明,但这边想分享的是我平常做题目时常会使用到的几个区块:
建议可以看看LeetCode原本的题目说明,这边是用我的方式说明题目,参考就好。
本题的目标是在一个nums的所有数字中,过滤掉相同的数字以後,找到第三大的数字。如果最终过滤完相同的数字後剩下数字不到三个,直接回传最大的数字。
约束:
范例1
输入:nums = [3,2,1]
输出:1
解释:这是基本范例,数字各一个,直接找到第三大的数字回传即可。
范例2
输入:nums = [1,2]
输出:2
解释:数字不到三个,直接输出最大的数字。
范例3
输入:nums = [2,2,3,1]
输出:1
解释:过滤完重复的数字後会剩3、2、1,因此第三大的数字为1。
建议到这边先停下来,尝试自己解解看,若没有想法可再继续走下去。
范例:nums = [3, 3, 4, 2, 1, 5]
若因为没想法而走到这边,建议看完想像以後再给自己一次机会试一次。
class Solution:
def thirdMax(self, nums: List[int]) -> int:
# 宣告三个变数,分别为第一、第二、第三大的数字
first = nums[0] # 可以直接先把nums中第一个数字给最大的位置
second = None
third = None
# 因已经先取出第一个数字放在第一大的位置了,因此从nums中第二个数字开始走
for i in range(1, len(nums)):
# 过滤相同的数字,出现过数字的不处理
if nums[i] == first or nums[i] == second or nums[i] == third:
continue
# 如果现在数字比第一个大,让第一、第二数字往後退到第二、第三的位置以後
# 再将数字放在第一大的位置
if first < nums[i]:
third = second
second = first
first = nums[i]
continue
# 如果现在数字比第二个大,第一位置不动
# 第二位置数字移到第三位置,再将数字放在第二大的位置
if second == None or second < nums[i]:
third = second
second = nums[i]
continue
# 如果现在数字比第三个大,第一、第二位置不动
# 直接将第三数字换成现在的值
if third == None or third < nums[i]:
third = nums[i]
continue
# 如第三位置有值,直接回传第三大数字
# 如第三位置没有值,代表过滤完不到三个数字,回传最大数字
return third if third != None else first
若内容有什麽问题或建议欢迎一起交流:)
感谢您今天愿意花时间看完这篇文章~~~~
Next:747. Largest Number At Least Twice of Others
>>: React.js 职场实战!最常见的需求与解法! — 前言
图片截自联合新闻网 笔者最近在看一个邀请影视明星来进行专业运动的节目:「全明星运动会」。节目是蛮有...
Gradle Setup 首先我们要在有用到 annotation processor 的 modu...
利用 Wireshark 观察 nmap 传输封包,点选左下角【Menu】输入【wireshark...
读者来函: 在Day22 谈思考那一篇,觉得好抽象,那有没有什麽样的方式可以帮助思考? 沉睡小五郎从...
前言 非常非常久以前写过一篇 TapPay 串接的文章 但可惜的是 TapPay 没有前端 npm ...