摘要: 题目:一个数组是由一个递增数列右移若干位形成的,比如{4,5,1,2,3}是由{1,2,3,4,5}左移两位形成的,在这种数组中查找某一个数。这道题其实是前面介绍的一道题目:面试题8:旋转数组的最小数字的一个变种。解题思路如下:首先通过“面试题8:旋转数组的最小数字”这道题目中获取元素分裂点,时间复杂度为O(log(n))因为旋转数组是由递增数组右移得到,因此旋转数组中的第一个元素是整个数组的中间元素,比较待查找元素与第一个元素,如果待查找元素大于等于第一个元素,表明待查找元素在前半段有序数组中;如果不是这待查找元素在后半段数组中。判断待查找元素所在的有序数组以后,我们通过一个简单的二分查找就 阅读全文
posted @ 2012-05-07 19:09 xwdreamer 阅读(5121) 评论(0) 推荐(0) 编辑
摘要: 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。例如输入{1,2,3,4,5}的一个旋转为{3,4,5,1,2},该数组的最小值为1。分析最直观的想法就是顺序遍历一次数组,就能够找出最小的数字,这样的时间复杂度是O(n),当时我也是这么跟面试官说的,我说遍历一次不就OK了吗?面试官说“如果你觉得遍历一次是你觉得最好的,那就跟我说!”我立马说不是的,让我想想,应该还有其他更有的方法。是的,既然叫做旋转数组,那么我们就需要利用好旋转数组的特性。看到这样的旋转数组查找最小数,我们会不会潜意识里面就想到了二分查找呢。确 阅读全文
posted @ 2012-05-07 15:41 xwdreamer 阅读(4714) 评论(4) 推荐(1) 编辑
摘要: 参考文献:http://blog.minidx.com/2008/02/03/468.html正文在面试的时候二分查找是用的比较多一种查找算法,如何在面试官面前快速准确得的写出代码决定你是否能够被录取。以前一直以为二分查找很简单,所以就没怎么重视,但是真要在面试官面前对着黑板手写出来,还是漏洞百出。今天自己在电脑面前敲出了二分查找的代码,也花了将近半个小时。对于这种基础排序查找算法,还是得好好重视。二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)。二分查找的一个条件是待查询的数组是有序的,我们假设这里的数组是升序的。二分查找的主要思路就是设定两个指针start和end 阅读全文
posted @ 2012-05-07 13:24 xwdreamer 阅读(23615) 评论(6) 推荐(6) 编辑