给定一个经过一次旋转的有序数组,从中查找一个值,若存在返回它的索引,不存在返回-1
2017-05-23 23:15
471 查看
/********************************************************************************************** **description:给定一个经过一次旋转的有序数组,从中查找一个值,若存在返回它的索引,不存在返回-1 ** 假定数组不存在重复元素 **********************************************************************************************/ #include<iostream> #include<vector> using namespace std; //采用二分查找,在确定二分的边界时分情况讨论,mid分成的两部分一定有一部分是有序的,如果数据不再有序的这部分,一定在另外一部分 //时间复杂度O(logn),空间复杂度O(1) int searchRotate(const vector<int> &arr, int target) { int low = 0; int high = arr.size() - 1; while (low <= high) { int mid = (low + high) / 2; if (target == arr[mid]) return mid; if (arr[mid] >= arr[low]) { if (target >= arr[low] && target < arr[mid]) high = mid - 1; else low = mid + 1; } else { if (target <= arr[high] && target > arr[mid]) low = mid + 1; 4000 else high = mid - 1; } } return -1; }
相关文章推荐
- 给定一个经过一次旋转的有序数组,从中查找一个值,若存在返回它的索引,不存在返回-1,假定数组存在重复元素
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 给定一个数组,从中查找是否存在两个数的和等于一个给定的x
- 在一个循环有序数组里查找一个给定的值是否存在
- 在一个有序的旋转数组中,查找给定值
- 在一个二维有序数组中,查找指定的数据是否存在
- (bitmap)给定一个字符串数组,从中找出第一个只出现一次的字母
- 从数组中找出一对元素,其和是一个给定的目标数字。假设数组中只存在一个符合要求的数值对,返回这些数值的下标
- 给定一个整数数组,返回数组中两个元素的和为target的索引
- 查找一个数是否存在于一个数组中。该数组分两段有序,第一段的数都大于第二段的数。
- 输入一个有序数组和一个数,若在数组中返回索引,若不在返回应该插入的索引
- 给定一个未排序的数组,返回是否存在一个长度为3的递增子序列或不在数组中。
- 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。 给定一个int数组A和数组的大小n,请
- 求不降序的数组arr中最大索引i使得arr[i]小于给定关键字,不存在则返回-1
- 给定一个整数数组,返回两个数字的索引,使它们相加得到一个特定目标值
- 在一个旋转过的有序数组上实现二分查找
- 用二分查找法判断任意整数在任意整数数组里面是否存在,若存在就返回它在数组中的索引位置,不存在返回-1
- 程序员面试金典——解题总结: 9.17中等难题 17.6给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n - m越小越好,也就是说,找出
- 给定一个整数数组,1≤a [i]≤n(n =数组的大小),一些元素出现两次,其他出现一次 查找在该数组中出现两次的所有元素
- 【题目2】给定一个字符串数组,从中找出第一个只出现一次的字母