最近面试东京株式会社遇到这个题,特地来刷一下。
思路:
快排+二分,与快排不同的是,利用二分法每次都减少了一半的不必要排序。
当high=low小于k的时候,在后半部分搜索,
当high=low大于k的时候,在前半部分搜索。
代码:
# -*- coding:utf-8 -*- import sys def findKth(a, start, end, K): low, high = start, end key = a[start] while start < end: while start < end and a[end] <= key: end-=1 a[start] = a[end] while start < end and a[start] >= key: start+=1 a[end] = a[start] a[start] = key if start < K-1: return findKth(a, start+1, high, K) elif start > K-1: return findKth(a, low, start-1, K) else: return a[start] try: while(1): line=sys.stdin.readline() if line=='': break lines = line.strip().replace('[','').replace(']','').split(',') lines = list(map(int,lines)) n, K = lines[-2], lines[-1] val = findKth(lines, 0, n-1, K) print(val) except: pass
麻豆出品,必出精品!