被记住的永远是疯子!
简介
这道题是昨晚京东2020校园招聘数据研发岗的笔试题编码题原题,昨日时间有限,我又能力有限,所以木有写全,今天上午自己整理了一下,分享给需要的人吧。(有错还麻烦大家提示我,谢谢啦。)
题目
只能靠印象复述了:
有一队人(N个),按从左到右的顺序排成一队,每个人有自己的身高H,原始队列并未按照身高升序排列。现将队伍按照从左到右的顺序分成多个组,每组人数不一定相等,对每组人按身高排序,再按照拆分组的顺序排成一队,使得最后生成的队列是按照身高升序排列的(队列中间的身高可以相等)。求能够实现此需求的最大分组数。
输入:
第一行:N(人数)
第二行:Heights(身高,以空格隔开)
输出:
第一行:n(最大分组数)
例:
输入: 4
2 1 3 2
输出: 2
解题思路
我个人一开始对这道题的思路是很模糊的,递归?还是什么?想了许久,不如列一下需求。
分组:
分成几组?–N个人,最多分N组,所以可能分的组数为1-N。
怎么分?–N个人分1-N组的方法有很多种,举例子:4个人分三组包括3种情况,按照队列分可以列为(1,2,1)、(2,1,1)、(1,1,2),每个数字代表组内的人数。按照这个思想,我们可以根据每组的人数来拆分小组。所以就需要统计人数。
排序:
排序方法:内置高阶函数sorted
分析需求:求最大组数,N个人分1-N组,可以倒序来,N-1组,只要满足条件直接return返回最终结果。
代码
编译环境:python3.7 注:此代码并未考虑运算时间
编写代码:
import itertools
from copy import copy
if __name__ == "__main__":
# 输入的内容s:
s= '5\n2 1 3 2 5'
# 获取人数N
N = int(s.split('\n')[0])
# 获取身高列表并将其以int格式存储至列表
h_list = s.split('\n')