美团4-16第三题可通过答案

n , k = list(map(int,input().split()))
nums = list(map(int,input().split()))
nums.sort()  #列表排序
cnt = nums.count(nums[(k-1)//n])#计算pair中第一个数在列表中出现的次数
if cnt == 1:        
    print('(%d,%d)' % (nums[(k-1)//n],nums[(k-1)%n])) #如果第一位没有重复,直接输出
else:
    #pari中第一个数有重复,先找到重复的元素第一次出现的位置(这个位置查找我记得可用二分,不过前面排序已经O(nlogn)了,这里O(n)无伤大雅吧。。。)
    index1 = nums.index(nums[(k-1)//n])
    k2 = k -n*index1  #找到pair中第二个数此时的偏移量
    #因为nums[(k-1)//n]是可以明确pair中第一个数是什么,但是如果这个数重复cnt次
    #说明pair第二个数的顺序就是列表中每个数重复cnt次,(用k2-1)//cnt 去除重复
    print('(%d,%d)' % (nums[(k-1)//n],nums[ (k2-1)//cnt ]))
    
##测试用,输出所有从k =1 到 k= n*n 的结果    
#n  = 5
#nums =[3,1,3,4,3]
#nums.sort()
#for k in range(1,n*n + 1):
#    cnt = nums.count(nums[(k-1)//n])
#    print('k= ',k,end ='输出 ')
#    if cnt == 1:
#        #如果第一位没有重复,直接输出
#        print('(%d,%d)' % (nums[(k-1)//n],nums[(k-1)%n]))
#    else:
#        #pari中第一个数有重复,先找到重复的元素第一次出现的位置
#        index1 = nums.index(nums[(k-1)//n])
#        k2 = k -n*index1  #找到相对于重复元素第一次出现位置的偏移量
#        print('k2= ',k2,'(k2-1)//cnt =', (k2-1)//cnt ,end ='输出 ')
#        print('(%d,%d)' % (nums[(k-1)//n],nums[ (k2-1)//cnt ] ))

#美团笔试##美团##笔试题目#
全部评论
啊。。昨天做这个题死活就是40%多。。怎么就没想到去重呢。。我以为有重复的元素结果也要跟着重复呢
点赞 回复 分享
发布于 2020-04-17 09:25

相关推荐

11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
评论
3
2
分享
牛客网
牛客企业服务