美团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 ] ))
#美团笔试##美团##笔试题目#