旋转数组中查找元素
来源:互联网 发布:淘宝一键抢拍神器 编辑:程序博客网 时间:2024/04/26 11:22
题目:从无重复元素的旋转数组中查找某个元素是否存在
比如:[0,1,2,3,4,5,6,7],旋转数组为[4,5,6,7,1,2,3]
排序的数组或是部分排序的数组都用二分查找。
int Search(int a[],int n,int key){if(a==NULL||n<=0)return -1;int low=0,high=n-1;while(low<=high){int mid=(low+high)/2;if(a[mid]==key)return mid;if(a[low]<=a[mid]) //前半段是有序的{if(a[low]<=key&&key<a[mid]) //查找的元素在a[low...mid)之间high=mid-1;else //查找的元素在a(mid...high]之间low=mid+1;}else //a[low]>a[mid] 后半段有序{if(a[mid]<key&&key<=a[high]) //查找的元素在a(mid...high]之间low=mid+1;else //查找的元素在a[low...mid)之间high=mid-1;}}return -1;}
如果数组里存在重复元素,那么当a[low]<=a[mid]就不能说明a[low...mid]是有序的了,比如[1,2,1,1,1,1,1]
int search(int a[],int n,int key){int low=0,high=n-1;while(low<=high){int mid=(low+high)/2;if(a[mid]==key)return mid;if(a[low]<a[mid]){if(a[low]<=key&&key<a[mid])high=mid-1;elselow=mid+1;}else if(a[low]>a[mid]){if(a[mid]<key&&key<=a[high])low=mid+1;elsehigh=mid-1;}else //a[low]==a[high],low下移一位low++;}return -1;}
0 0
- 旋转数组中查找元素
- 旋转数组中查找某个元素
- 旋转数组中查找指定元素
- 旋转数组中元素的查找
- 微策略面试题:在旋转后的数组中查找元素(二分查找)
- 在旋转后的有序数组中查找元素,要求O(logn)的时间复杂度
- 在旋转后的有序数组中查找元素,要求O(logn)的时间复杂度
- Search in Rotated Sorted Array 在旋转的数组中查找元素
- Search in Rotated Sorted Array II 旋转的数组中查找,有重复元素
- 数组中查找指定元素
- 找出旋转数组中最小的元素
- 旋转数组中查找某数
- 在旋转数组中查找某个数
- 查找旋转数组中的最小值元素(剑指offer8)
- 8+查找一个旋转数组的最小元素
- 小米笔试题(查找旋转数组中的元素)
- 有序数组旋转后的元素值查找
- 数组---在数组中查找元素
- .NET应用架构设计—适当使用活动记录模式代替领域模型模式
- 数据库学习--mysql 分页查询语句
- [企业路由器] IPSec VPN设置指南
- JDBC中Statement和PrepareStatement的区别及特性
- audio的应用和常见属性
- 旋转数组中查找元素
- codeforces A#264. Caisa and Sugar
- Swift之optional使用总结
- 算法及定理证明
- STL array方法总结(二)Capacity和Modifiers(21)
- 重新定义的html标签
- canvas的使用:
- 判断程序是否首次加载(粗略代码)
- ACM小技巧