京东数据分析笔试题

1、第一题——姓名排序

ZHANG SAN
LI SI
WANG WU
WANG LIU
WANG QI
ZHANG WU
LI WU
给出n行姓名,然后根据姓出现次数进行排序,当姓出现次数一样大多的时候,根据输入的熟悉排序。
3 WANG WU
4 WANG LIU
5 WANG QI
1 ZHANG SAN
2 LI SI
6 ZHANG WU
7 LI WU
结果如上,第一列为我自己加的输入顺序。
最后考试结束的时候解决了最后的问题,不知道能不能ac。然后就是非常暴力的解法。。也不知道对不对,麻烦大神给看看可行不可行。
count = 0
ans = {}

while(1):
    # 读取每一行
    line = input()
    if line != "":
        count += 1
        if line.split()[0] not in ans.keys():
            ans[line.split()[0]] = [1,[line.split()[1],count]]
        else:
            ans[line.split()[0]][0] += 1
            ans[line.split()[0]].append([line.split()[1],count])
# 先用字典统计姓出现的次数,并存储下来对应的名字和输入顺序。{姓:[次数,[名1,次序],[名2,次序]...]}

    else:
        break
firstcount = []
# 第一次遍历字典,获取姓名出现的次数,并进行排序和取唯一值处理
for key,value in ans.items():
    if value[0] not in firstcount:
        firstcount.append(value[0])

firstcount = sorted(firstcount,reverse=True) 
index = []
# 第二次遍历字典,将对应出现次数的姓根据出现次数的递减的情况添加到待输出的列表 tempList [[姓1,[名1,次序]],[姓1,[名2,次序]]...]
# 此时的tempList中均为出现情况如下
# 1、只有一个姓——按照出现顺序输出。此时是在出现次数递减的情况下,
# 2、多个姓。
# 
for i in firstcount:
    tempList = []
    for key,values in ans.items():
        if values[0] == i:
            for value in values[1:]:
                tempList.append([key,value])
    for value in tempList:
        index.append(value[1][1])
        # 获取输入的次序,对次序进行排序。升序
    index = sorted(index)
    for i in index:
        for value in tempList:
            if i == value[1][1]:
                print(' '.join([value[0],value[1][0]]))
    # 遍历待输出列表,因为次序的唯一性,可以完全输出。
        

                

最后几分钟没提交上,麻烦各位大神帮忙看看。以及,为什么我都还没怎么看到用python写的 人捏。。。

2、第二题,最佳输入次数。

时间来不及了,大概的思路就是,当前是小写的情况,一个小写字符后三个如果都是大写,则必须切换大小写键,然后这一段大写的按键次数是 k - 2次;然后就没有然后了。。c++大神们的看不懂啊。。




#京东##笔试题目##数据分析师#
全部评论
统计次数放排序的key就好了,python的sort还是稳定排序。c++的话自带的sort不稳定,还要写归并。
点赞 回复 分享
发布于 2019-08-25 00:19
第一题的想法是,取姓氏和姓氏出现的次数作为dict,每次先取dict中值最大的姓氏,如果值相同则全部取出,且从dict中删除对应的姓氏。当dict中还存在姓氏时,遍历姓名list,如果姓氏在取出的姓氏list中,则输出。 这个复杂度太高了,AC90,应该还有更好的方法。
点赞 回复 分享
发布于 2019-08-25 00:54
第一题我直接放弃了。 第二题我的思路是:设置一个标志位,表示当前的大小写状态,然后判断是否需要切换大小写,然后如果不用切换,次数直接+1,要切换的话,判断它的下一个和他的状态是否一致,如果一致,就用大写键,不一致的话就是shift。
点赞 回复 分享
发布于 2019-08-25 09:42

相关推荐

Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
3 46 评论
分享
牛客网
牛客企业服务