每天一道算法题

第一章:计算最值,次最值

第二章:进制的转换

第三章:质数,水仙花,公约数

第四章:子序列问题

首页 > 每天一道算法题 > 第一章:计算最值,次最值 > 1.3节:计算四个中的次大值

1.3节:计算四个中的次大值

薯条老师 2021-03-25 15:33:26 234372 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

1.3.1 算法思路

假设有四个整型变量,该怎么计算四个中的次大值?

图片.png

初学者解出这道题并不困难,但是将代码写得简洁优雅却是一个不小的挑战。

直接通过if来逐一比较,这样的思路显然是错的,最终写出的只是一坨又长又臭的代码。比较好的思路是先计算三个变量中的最大值以及中值,将其大小关系确定下来:

图片.png

然后将第四个变量分别与最大值,中值进行比较,如果比三个中的最大值要大,那么次大值肯定就是三个中的最大值,如果比最大值小但比中值要大,那么次大值肯定就是第四个值。否则次大值一定是三个中的中值,为什么呢?因为次大值一定不是三个中的最小值,所以只能是三个中的中值。

先将三个变量的大小关系确定下来,这样才方便进行比较。

1.3.2 算法实现

# __author__ = 薯条老师
import random
x = random.randint(0, 1000)
y = random.randint(0, 1000)
z = random.randint(0, 1000)
k = random.randint(0, 1000)

# 计算三个中的最大值
max_ = x if x > y else y
if z > max_:
    max_ = z

# 计算三个中的最小值
min_ = x if x < y else y
if z < min_:
    min_ = z

# 将三个变量相加再减去最大值和最小值,结果一定是中值
median = x+y+z-max_-min_

# 假设三个中的中值为次大值
max_k2 = median

if k > max_:
    # 比三个中的最大值max_要大,次大值就是max_
    max_k2 = max_
elif k > median:
    # 比max_小但比median大,那么次大值就是k
    max_k2 = k

print("次大值:{}".format(max_k2))

1.3.3 最具实力的小班培训

来这里参加Python和Java小班培训的学员大部分都找到了很好的工作,平均月薪有11K,学得好的同学,拿到的会更高。由于是小班教学,所以薯条老师有精力把每位学员都教好。打算参加线下小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:





欢迎 发表评论: