摘要: 今天阿里笔试题的倒数第二道,给数组排序,这个数组的特点是任一元素现在的位置和把数组排好序后它的位置距离小于k,即a[i]元素在数组排序后将位于{i-k,i+k}这个区间内。要求时间复杂度小于o(nk)。某人的分析:因为交换范围不可能超过(i-k,i+k),所以每排完一轮2K,2K中的前K个就是已排好的,不会再动了,这时候可以直接偏移掉比O(nlogn)和O(nk)小的,只剩下O(nlogk),O(n),O(logn),O(1)这几种情况了,排序算法基本不可能后两种,O(n)的排序都有庞大的空间开销或者特殊的数据范围(比如字节组),所以这种有个参数k的题,根据经验也是O(nlogk)。方法1:建 阅读全文
posted @ 2012-10-10 09:40 Jack204 阅读(1378) 评论(1) 推荐(0)