-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSearchRotateArray.java
More file actions
77 lines (73 loc) · 3.02 KB
/
SearchRotateArray.java
File metadata and controls
77 lines (73 loc) · 3.02 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
package LeetCodeOJ;
/*
* Search in Rotated Sorted Array
* Ĭ����������
* Suppose a sorted array is rotated at some pivot unknown to you beforehand.
* (i.e., 0 1 2 4 5 6 7 mighSearch in Rotated Sorted Arrayt 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.
*/
public class SearchRotateArray {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
int mid = 0;
while (low <= high) {
/*
* mid = (low + high)/2; if(target == nums[mid]){ return mid; }else
* if(target < nums[mid]){ if((nums[mid] >= nums[low] && target <
* nums[low])){ low = mid + 1; }else{ high = mid - 1; } }else{
* if(nums[mid] <= nums[high] && target > nums[high]){ high = mid -
* 1; }else{ low = mid + 1; } }
*/
/*
* mid = (low + high)/2; if(target == nums[mid]){ return mid; }else
* if(target < nums[mid]){
*
* 1��������������ҿ�������߲��ң�
* 2������������ʱ�ұ߿϶������Ƕ������target �����������ֻ������߲���
*
* if((nums[mid] >= nums[low] && target >= nums[low])){ high = mid -
* 1; }else if(nums[low] > nums[mid]){ high = mid - 1; }else{ low =
* mid + 1; }
*
* }else{
*
* 1�������������ҿ������ұ߲��ң� 2������ұ����� �����������ֻ�����ұ߲���
*
* if(nums[mid] <= nums[high] && target <= nums[high]){ low = mid +
* 1; }else if(nums[mid] > nums[high]){ low = mid + 1; }else{ high =
* mid - 1; } }
*/
/*
* ������
*/
mid = (low + high) / 2;
if (target == nums[mid]) {
return mid;
} else {
// 左边有序;无重复所以可以写等于,因为当走到一个元素low==mid
if (nums[low] <= nums[mid]) {
if (target >= nums[low] && target < nums[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
// 右边有序
else {
if (target > nums[mid] && target <= nums[high]) {
low = mid + 1;
} else {
high = mid - 1;
}
}
}
}
return -1;
}
public static void main(String[] args) {
int[] n = { 4, 5, 6, 7, 8, 0, 1, 2, 3, 3 };
System.out.println(new SearchRotateArray().search(n, 8));
}
}