
本文来源于力扣圈子,作者:小白二号,点击查看原文。
力扣leetcode-cn.com题目来源:2020 年秋招笔试题(ps: 大家看完题目思考后再看解析)
一、面试题
例题一:
鹅厂的下午茶时间!很多人都去公司楼下的星巴克买咖啡,由于买咖啡的人很多,所以就排起了长长的队伍。
队伍当中有 n 个顾客,从 1 到 n 标号,一开始,每个顾客 i 在队伍当中的位置是 i。每个顾客有两个属性
数据:
例题二:
公司准备给 n 名用户快递礼物,在甲地和乙地各有个仓库存放了 a 和 b 个这种礼物。从甲地和乙地给每名用户快递礼物的费用是不同的,请计算让 n 名用户都收到礼物的最低总费用是多少?
数据:
例题三:
跑跑卡丁车是一款经典游戏,这款游戏里面有加速带。已知通过每个加速带,卡丁车会获得一个加速度
说明:
- 加速带效果不可叠加,已知卡丁车的初始速度为 0。
- 所有加速带都是无缝衔接的(即加速带与加速带之间没有缝隙),且小车一开始就被放置于某一加速带。
- 根据牛顿运动定律,在每个加速带后卡丁车的位移是
数据:
例题四:
你是一个活动晚会的组织者。晚会总的时间长度为 t 分钟,共有 n 个候选节目。每个候选节目有三个值,
如果在第
你需要在
要求两个节目的时间不能重叠,且你可以在任意时间安排人员进行任意时长的休息(除了节目进行时),而不会影响满意度。
晚会开始时视做第 0 分钟
数据:
二、解析
这几个题都跟排序有关,而且排序的条件是相对比较隐晦的。
第一题:
假设第 i 个顾客位于第 j 个位置,他的不满意度是:
看后面化简后的式子,
后面哪一项是关键,
因此这个题的解法是:按
第二题:
显而易见,如果没有仓库礼物总数这个限制条件,对于第
那么我们再看仓库礼物总数,如果正好能够满足发货,那么直接按照这个策略发货即可,如果不够,那么考虑把一部分人挪到另一个仓库,怎么挪呢?
我们先假设甲地的礼物总数不够,对于在甲地发货的用户,如果从甲地发货挪到乙地发货,花费需要增加
因此这个题的解法是:先按
第三题:
这个题比较难懂,先来解释一下题目:
加速效果不能叠加,首先卡丁车一开始会被放置在第 1 个加速带,跑出
跟第一题一样,
观察某两个相邻的加速带,假设我们就拿第一个加速带和第二个加速带来观察,其他加速带位置不变,那么第一个加速带跟第二个加速带哪个排在前面?
第一个加速带排在第二个加速带前面,跟第二个加速带排在第一个加速带前面,代入上述式子,化简:
相当于
当
另外,可证明当
因此这个题的解法是:按加速度 a 排序,加速度大的排前面。
第四题:
这题啊,有两个约束条件:
1. n 个候选节目可选可不选,时间总长度为 t
2. 如果第
如果单看第 1 点,没有第 2 点节目开始位置对满意度的影响,那么就是背包问题,动态规划解决。
如果单看第 2 点,没有第 1 点节目长度的限制,那么就是排序问题。
动态规划重要的条件之一,多变量在规划的过程中,中间状态增量更新,不需要重新规划前面已经规划过的变量
如果我们通过排序问题,将节目的前后关系先列出来,就把动态规划的前提条件给构造出来了,即:
如果节目
我们来求这个结论:假设晚会进行了
因此这个题的解法是:先按
动态规划:令
转移方程:
写在最后:
我写完这些题的总结之后,我就在想,排序模型是否可以用数学模型来描述,什么样的题型就得用排序算法。
题目:给定 n 个数,在这 n 个数的所有排列中,求函数
条件:考察其中两个位置,如果交换能使目标函数更大,那么这个题就可用排序来解决。
特例:
- 升序排序:
为排列中的逆序对的数量的相反数
- 降序排序:
为排列中的逆序对的数量
排序函数的求法:考察其中两个位置,对比目标函数的增减,可求出排序函数。
本文作者:小白二号
声明:本文归作者版权所有,如需转载请联系。