摘要:        
一开始马上想起来寻找第k小的数,是采用快排的partition方法。但因为题目要把k之前的数排序输出,这个方法就不是很合适,因为(随机化后:http://blog.csdn.net/liangbopirates/article/details/9377105)它最差能在O(n)找到第k小的数,那么就要最差k*O(n)。如果对前面部分排序那就是O(k*logk) + O(n)了。都不合适,看来最合适的还是使用堆,能做到O(n*logK)。但partition方法和堆方法比较,有个好处就是inplace,不占多余内存,在海量数据处理的时候有这个好处。下面这段代码是寻找第k小的数,其精华部分是par    阅读全文
posted @ 2013-08-31 14:54
阿牧遥
阅读(290)
评论(0)
推荐(0)
        
            
        
        
摘要:        
这道题就是典型的约瑟夫环问题。http://blog.csdn.net/wuzhekai1985/article/details/6628491一开始想了一下用数组来做,就是模拟方法,同时记录一下是不是一个节点已经删除。然后看了一下,也很自然的可以用链表来做。但这样的复杂度都是O(m*n)。如果不用模拟出其中的所有步骤,那么可以用数学方法来解,就是一个递推公式。f(n) = (f(n-1) + m) % n; f(1) = 1。推导过程参加链接。但精华部分是,当n个数字删掉一个数后,就成为了n-1个数,假设知道n-1个数的剩下的编号x,就可以映射回原来n个数里面。“胜利者的编号为 (x + k    阅读全文
posted @ 2013-08-31 00:44
阿牧遥
阅读(246)
评论(0)
推荐(0)
        
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号