剑指offer66题--Java实现,c++实现和python实现 6.旋转数组的最小数字

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5, 1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.注意:给出的所有元素都大于0,若数组大小为0,请返回0。

C ++实现

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        int length=rotateArray.size();
        if(rotateArray.empty()||length<=0)
            return 0;
        int index1=0;
        int index2=length-1;
        int indexMid=index1;
        while(rotateArray[index1]>=rotateArray[index2])
        {
            if(index2-index1==1)
            {
                indexMid=index2;
                break;
            }
            indexMid=(index1+index2)/2;
            //如果下标index1,index2和indexMid相等则使用顺序查找
            if(rotateArray[index2]==rotateArray[index1]&&
              rotateArray[indexMid]==rotateArray[index1])
                return MininOrder(rotateArray,index1,index2);
            if(rotateArray[indexMid]>=rotateArray[index1])
                index1=indexMid;
            else if(rotateArray[indexMid]<=rotateArray[index2])
                index2=indexMid;
        }
        return rotateArray[indexMid];
    }
    int MininOrder(vector<int> rotateArray,int index1,int index2)
    {
        int result=rotateArray[index1];
        for(int i=index1+1;i<=index2;++i)
        {
            if(result>rotateArray[i])
            {
                result=rotateArray[i];
            }
        }
        return result;
    }
};

Java的实现

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int length=array.length;
        if(length<=0)
            return 0;
        int index1=0;
        int index2=length-1;
        int indexMid=index1;
        while(array[index1]>=array[index2])
        {
            if(index2-index1==1)
            {
                indexMid=index2;
                break;
            }
            indexMid=(index1+index2)/2;
            //如果下标index1,index2和indexMid相等则使用顺序查找
            if(array[index2]==array[index1]&&
              array[indexMid]==array[index1])
                return MininOrder(array,index1,index2);
            if(array[indexMid]>=array[index1])
                index1=indexMid;
            else if(array[indexMid]<=array[index2])
                index2=indexMid;
        }
        return array[indexMid];
    }
            int MininOrder(int [] array,int index1,int index2)
        {
            int result=array[index1];
            for(int i=index1+1;i<=index2;++i)
            {
                if(result>array[i])
                {
                    result=array[i];
                }
            }
            return result;
        }
}

蟒蛇实现

# -*- coding:utf-8 -*-
class Solution:
    def minNumberInRotateArray(self, rotateArray):
        # write code here
        lenArr = len(rotateArray)
        left, right = 0, lenArr-1
        while left <= right:
            if right - left == 1:
                return rotateArray[right]
            mid = (left + right)//2
            if rotateArray[mid] == rotateArray[right]:
                return self.MinInOrder(rotateArray, left, right)
            if rotateArray[mid] >= rotateArray[left]:
                left = mid
            elif rotateArray[mid] <= rotateArray[right]:
                right = mid
        return rotateArray[right]
    def MinInOrder(self, rotateArray, left, right):
        res = rotateArray[left]
        for i in range(left, right+1):
            if res > rotateArray[i]:
                res = rotateArray[i]
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值