033 - Search in Rotated Sorted Array

来源:互联网 发布:ug编程怎么加刀补 编辑:程序博客网 时间:2024/06/15 21:18

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.



一个排好序的数列,把分割成多块,再乱序交叉,再查找一个数

int *findright(int *num, int numsize){int left = 0, right = numsize - 1, mid;while (left <= right) {mid = (left + right) / 2;if (num[mid] >= *num) left = mid + 1;else if(num[mid] < *num) right = mid - 1;}return num + left - 1;}int findmid(int *nums, int *x, int size, int target){int left = 0, right = size - 1, mid;while (left <= right) {mid = (left + right) / 2;if (x[mid] < target) left = mid + 1;else if(x[mid] > target) right = mid - 1;else break;}return left > right? -1 : x - nums + mid;}int search(int* nums, int numsSize, int target) {int *left, *right, *move = nums;while (1) {left = move;right = findright(move, numsSize - (left - nums));if (*left > target) move = right + 1;else if (*right < target) move = right + 1;else {return findmid(nums, left, right - left + 1, target);}if (right - nums == numsSize - 1) return -1;}}


0 0