例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
1:
1
2
3
4
5
6
7
8
9
|
public
int
minNumberInRotateArray(
int
[] array) {
if
(array.length ==
0
)
return
0
;
for
(
int
i =
0
; i < array.length -
1
; i++) {
if
(array[i] > array[i +
1
])
return
array[i +
1
];
}
return
array[
0
];
}
|
2、二分查找:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public
static
int
minNumberInRotateArray(
int
[] array) {
if
(array.length ==
0
)
return
0
;
int
left =
0
;
int
right = array.length -
1
;
int
middle = -
1
;
while
(array[left]>=array[right]) {
if
(right-left==
1
){
middle = right;
break
;
}
middle = left + (right - left) /
2
;
if
(array[middle] >= array[left]) {
left = middle;
}
if
(array[middle] <= array[right]) {
right = middle;
}
}
return
array[middle];
}
|