查找和排序
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解答:
Javascript解答:
function minNumberInRotateArray(rotateArray)
{
if(rotateArray.length == 0){
return 0;
}
for(var i = 0 ; i < rotateArray.length - 1; i ++){
if(rotateArray[i+1] < rotateArray[i]){
return rotateArray[i + 1];
}
}
}
module.exports = {
minNumberInRotateArray : minNumberInRotateArray;
};
Java解答:
import
java.util.ArrayList;
public
class
Solution {
public
int
minNumberInRotateArray(
int
[] array) {
if
(array.length==
0
){
return
0
;
}
if
(array.length==
1
){
return
array[
0
];
}
for
(
int
i=
0
;i<array.length-
1
;i++){
if
(array[i]>array[i+
1
]){
return
array[i+
1
];
}
else
{
if
(i==array.length-
2
){
return
array[
0
];
}
}
}
return
0
;
}
}
C++解答:
class
Solution {
public
:
int
minNumberInRotateArray(vector<
int
> rotateArray) {
sort(rotateArray.begin(),rotateArray.end());
return
rotateArray[
0
];
}
};
C#解答:
class
Solution
{
public
int
minNumberInRotateArray(
int
[] rotateArray)
{
if
(rotateArray==
null
||rotateArray.Length==
0
)
return
0
;
int
low=
0
;
int
high=rotateArray.Length-
1
;
int
mid=
0
;
while
(rotateArray[low]>=rotateArray[high])
{
if
(high-low==
1
)
{
mid=high;
break
;
}
mid=(low+high)/
2
;
if
((rotateArray[low]==rotateArray[mid])&&
(rotateArray[low])==rotateArray[high])
{
return
GetMinByOrder(rotateArray);
}
if
(rotateArray[low]<=rotateArray[mid])
{
//左边有序
low=mid;
}
else
{
//右边有序
high=mid;
}
}
return
rotateArray[mid];
}
private
int
GetMinByOrder(
int
[] array)
{
int
min=array[
0
];
foreach(
int
item in array)
{
if
(item<min)
min=item;
}
return
min;
}
}
Python解答:
# -*- coding:utf-
8
-*-
class
Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
pre = -7e20
for
num in rotateArray:
if
num < pre :
return
num
pre = num
if
len(rotateArray) ==
0
:
return
0
return
rotateArray[
0
]