leetcode春季全国编程大赛答案

简介: leetcode春季全国编程大赛答案

再来回顾下题目:

image.png

最近出题人的语文水准直线下降,看懂题目也成了考试的考点之一了。就让小编用人类的语言翻译一下这个题:

这之前,先让我们明白什么是数学里的期望值:

期望值大学时候老师讲过,就是实际的效果*概率 得到的就是了。比如:你去赌博,赢的话可以赢100块钱,但是几率只有1/3 。输的话输50块钱,但是几率有2/3。那么你是赌还是不赌呢?针对这个历史性问题,数学家给出了期望值的概念,如果最终期望为正,就可以赌,次数越多,你赚的就越稳。

你赢钱的期望值 =  100 * 1/3 = 33.333

你输钱的期望值 = -50 * 2/3 = -33.333

也就是说,你赌的次数越多,最终越接近不赔不赚。

那么再来回顾这道题:


首先我们要明白这个题到底有没有实际意义?一般没有实际意义的题目我是嗤之以鼻的。不过这道题,虽然花里胡哨,但是确实有一定实际意义和需求在。

说,有一个公司在招人。有俩个面试官,小a 和小b,他们俩个呢,不在一起办公。

然后某天hr推荐了7个简历过来,hr呢很负责,按照简历的能力值给排好顺序了。比如[1,2,3,3,3,6,6]

然后 俩位面试官呢 在自己的办公室,同时拿到了这7个简历,顺序什么的都一摸一样,他们自然而然的都从能力值最高的简历开始看起来。

也就是说 他们一开始 都会去选择 能力值6的 俩个简历。但是他们有可能拿重复了。比如这俩个能力值6的简历应聘者一个叫甲,一个叫乙。那么面试官小a可能第一次看的甲,然后小b可能第一次也看的甲。那么他们就看重复了。这就是公司上对于时间的一种浪费行为。然后小a看完了甲 又去看乙的简历,然后小b 看完了甲 同样去看乙的简历,这就必然又导致了一次重复。

那么这道题的现实意义就来了。计算出这个重复的期望值,也就是提前算一下公司会承担的浪费时间的成本。

刚刚我们举例里面,俩位面试官在能力值6的这俩份简历上 浪费了时间成本 为2,也就是第一次重复看了甲,第二次也重复看了乙。但是这种情况出现的概率是多少?应该是1/4

为啥是1/4呢?

因为一共四种情况:

1.小a先看甲,后看乙,小b先看甲,后看乙

2.小a先看甲,后看乙,小b先看乙,后看甲

3.小a先看乙,后看甲,小b先看甲,后看乙

4.小a先看乙,后看甲,小b先看乙,后看甲

综上所述:我们分析第一种情况的期望值为:重复2次 * 1/4 = 0.5

第二种情况的期望值为:重复0次 * 1/4 = 0

第三种情况的期望值为:重复0次 * 1/4 = 0

第四种情况的期望值为:重复2次 * 1/4 = 0.5

最后总结果为:0.5+0+0+0.5 = 1

这个结果就是我们对能力值6的俩份简历的最终期望值结果。

然后我们再去计算 能力值 [1,2,3,3,3,6,6] 中 3的最终期望值 然后是2,然后是1。

最后把这些加到一起,就是最终答案了

看到这,大家应该已经明白了这种计算浪费时间成本的期望值的方法了吧?

那么就试着理解下这个最终答案吧?

class Solution(object):
    def expectNumber(self, scores):
        """
        :type scores: List[int]
        :rtype: int
        """
        scores.sort()
        scores = scores[::-1]
        res = []
        tmp_index = 1
        for i in range(len(scores)):
            try:
                if scores[i+1] == scores[i]:
                    tmp_index +=1
                    continue
                else:
                    res.append(tmp_index)
                    tmp_index = 1
            except:
                res.append(tmp_index)
        return len(res)

微信图片_20220613230240.png

相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
6月前
Leetcode之多线程编程题
现有函数 printNumber 可以用一个整数参数调用,并输出该整数到控制台。 例如,调用 printNumber(7) 将会输出 7 到控制台。 给你类 ZeroEvenOdd 的一个实例,该类中有三个函数:zero、even 和 odd 。ZeroEvenOdd 的相同实例将会传递给三个不同线程:
|
算法
动态规划编程题集合(leetcode)
动态规划编程题集合(leetcode)
动态规划编程题集合(leetcode)
动态规划编程题集合(leetcode)
二叉树编程题集合(leetcode)
二叉树编程题集合(leetcode)
|
人工智能 算法 BI
【LeetCode——编程能力入门第二天】运算符(三角形的最大周长(贪心算法)/找到最近的有相同 X 或 Y 坐标的点)
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。
117 0
|
算法 程序员
【LeetCode——编程能力入门第一天】基本数据类型[在区间范围内统计奇数数目/去掉最低工资和最高工资后的工资平均值)
给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。 示例 1: 输入:low = 3, high = 7 输出:3 解释:3 到 7 之间奇数数字为 [3,5,7] 。 示例 2: 输入:low = 8, high = 10 输出:1 解释:8 到 10 之间奇数数字为 [9] 。 提示: 0 <= low <= high <= 10^9。
104 0
|
算法
回溯算法编程题集合(leetcode)
回溯算法编程题集合(leetcode)
|
存储
单调栈编程题集合(leetcode)
单调栈编程题集合(leetcode)
下一篇
无影云桌面