美团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

相关推荐

想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
3 2 评论
分享
牛客网
牛客企业服务