查找和排序
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{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]

浙公网安备 33010602011771号