-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSearchRotatedArr.c
More file actions
100 lines (86 loc) · 2.31 KB
/
SearchRotatedArr.c
File metadata and controls
100 lines (86 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
问题描述:
Suppose an array sorted in ascending order 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.
Your algorithm's runtime complexity must be in the order of O(log n).
Example 1:
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Example 2:
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
解题思路:
*/
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int BinarySearch(int* nums,int size,int target){
int low=0;
int high=size-1;
int index=-1;
while(low<=high){
int mid=(low+high)/2;
if(nums[mid]==target){
index=mid;
break;
}else if(target>nums[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
return index;
}
int search(int* nums, int numsSize, int target){
int low=0;
int high=numsSize-1;
int index=-1;
while(low<=high){
int mid=(low+high)/2;
if(nums[mid]==target){
index=mid;
break;
}else{
if(nums[mid]>nums[low]){
if(target>=nums[low] && target<=nums[mid-1]){
high=mid-1;
}else{
low=mid+1;
}
}else if(nums[mid]==nums[low]){
if(mid<high){
if(target>=nums[mid+1] && target<=nums[high]){
low=mid-1;
}else{
break;
}
}else{
break;
}
}else{
if(mid<high){
if(target>=nums[mid+1] && target<=nums[high]){
low=mid+1;
}else{
high=mid-1;
}
}else{
if(target>=nums[low] || target <=nums[mid-1]){
high=mid-1;
}else{
break;
}
}
}
}
}
return index;
}
int main(){
int arr[]={5,1,2,3,4};
int index=search(arr,5,4);
printf("%d",index);
return 0;
}