电商网站建设咨询,wordpress 类似 免费,第三方网站下载素材是怎么做,网站建设水上乐园搜索旋转数组。给定一个排序后的数组#xff0c;包含n个整数#xff0c;但这个数组已被旋转过很多次了#xff0c;次数不详。请编写代码找出数组中的某个元素#xff0c;假设数组元素原先是按升序排列的。若有多个相同元素#xff0c;返回索引值最小的一个。
示例1: 输入…搜索旋转数组。给定一个排序后的数组包含n个整数但这个数组已被旋转过很多次了次数不详。请编写代码找出数组中的某个元素假设数组元素原先是按升序排列的。若有多个相同元素返回索引值最小的一个。
示例1: 输入: arr [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target 5输出: 8元素5在该数组中的索引
示例2: 输入arr [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target 11输出-1 没有找到
代码如下
//二分查找法--数组有序
class Solution {
public:int search(vectorint arr, int target) {int narr.size();if(arr[0]target){return 0;} int left0;int rightn-1;while(leftright){int midleft(right-left)/2;if(arr[mid]target)//含有重复值{while(mid1arr[mid-1]arr[mid]){mid--;}return mid;}else if(arr[left]arr[mid])//如果arr[left]arr[mid]说明数组在arr[mid]和arr[right]之间是有序的{if(targetarr[mid]targetarr[right])//当target在arr[mid]与arr[right]之间时使用二分查找{leftmid1;}else{rightmid-1;}}else if(arr[left]arr[mid])//如果arr[left]arr[mid]说明数组在arr[left]和arr[mid]之间是有序的{if(targetarr[left]targetarr[mid])//当target在arr[left]与arr[mid]之间时使用二分查找{rightmid-1;}else{leftmid1;}}else{left;//数组中有重复时并且nums[left]!target}}return -1;}
};