有序环形数列的查找问题
2015-03-05 10:53
148 查看
问题:有一个有序的环形数列,从小到大排好了,比如4, 5, 6, 1, 2, 3,从第四个位置开始当成环形看,就是一个有序数列1, 2, 3, 4, 5, 6。问题是在这个数列重找到给定的关键字。
看到有序,自然想到binary search。这个问题可以用binary search做,每次二分,把数组分成两部分,一部分是普通的有序数列,一部分是原问题。
代码如下:
看到有序,自然想到binary search。这个问题可以用binary search做,每次二分,把数组分成两部分,一部分是普通的有序数列,一部分是原问题。
代码如下:
bool search(int arr[], int b, int e, int k) { if (!arr || b < e || b < 0) return false; int s = b + (e - b)/2; if (arr[s] == k) return true; else if (arr[s] > k) { if (arr[s] > arr[b]) { if (k >= arr[b]) return bsearch(arr, b, s-1, k); else return search(arr, s+1, e, k); } else { return search(arr, b, s-1, k); } } else { if (arr[s] > arr[b]) return bsearch(arr, s+1, e, k); else { if (k >= arr[b]) return search(arr, e, s-1, k); else return bsearch(arr, s+1, e, k); } }
相关文章推荐
- 2维有序数组中查找一个数K的问题
- 循环有序数组查找问题
- 算法:有序数组删除重复元素,和查找等值键的问题
- 二分法从有序数列中查找数据
- (转载)循环有序数组查找问题
- 【百度面试题】循环有序数组的查找问题
- N个有序整数数列已放在一维数组中,利用二分查找法查找整数m在数组中的位置,若找到,则输出其下标值;反之,则输出 “Not be found”
- 数据结构与算法分析笔记与总结(java实现)--链表9:有序环形链表中插入新结点问题
- 查找最长有序数列
- 转:循环有序数组查找问题
- 多个有序数列中查找第k小值
- LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)
- 数组问题 1.行列有序二维数组中查找2.在一组数成对出现的数中有两个数只出现一次3.在移位数组中查找一个数
- 【百度面试题】循环有序数组的查找问题
- 有序数列中查找和为某定值的两个数
- 二维“有序”数组查找问题的解决
- 二分法查找有序数列
- 在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found
- 字符串问题---在有序但含有空的数组中查找字符串
- 部分有序中查找给定值-【百度面试题】循环有序数组的查找问题