美文网首页面试算法
牛客-剑指0ffer-旋转数组的最小数字

牛客-剑指0ffer-旋转数组的最小数字

作者: wenyilab | 来源:发表于2019-07-26 08:26 被阅读137次

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

# -*- coding:utf-8 -*-
class Solution:
    def minNumberInRotateArray(self, rotateArray):
        # write code here
        '''
        minnumber = rotateArray[0]
        for i in range(len(rotateArray)):
            if rotateArray[i] < minnumber:
                minnumber = rotateArray[i]
        return minnumber
        '''
        if len(rotateArray) == 0:
            return 0
        low = 0
        high = len(rotateArray) - 1
        while high - low > 1:
            middle = (low + high) // 2
            if rotateArray[middle] == rotateArray[low] and rotateArray[low] == rotateArray[high]:
                for i in range(low+1,high+1):
                    if rotateArray[i] < rotateArray[low]:
                        return rotateArray[i]
            elif rotateArray[middle] >= rotateArray[low]:
                low = middle
            elif rotateArray[middle] <= rotateArray[high]:
                high = middle
        return rotateArray[high]

Lintcode

585.Maximum Number in Mountain Sequence
Description
Given a mountain sequence of n integers which increase firstly and then decrease, find the mountain top.

Example 1:
Input: nums = [1, 2, 4, 8, 6, 3]
Output: 8

Example 2:
Input: nums = [10, 9, 8, 7],
Output: 10

class Solution {
public:
    /**
     * @param nums: a mountain sequence which increase firstly and then decrease
     * @return: then mountain top
     */
    int mountainSequence(vector<int> &nums) {
        // write your code here
        int start = 0,end = nums.size();
        while(start+1 < end){
            int left = start + (end - start) / 2;
            int right = end - (end - left) / 2;
            
            if(nums[left] < nums[right]){
                start = left + 1;
            }
            else if(nums[left] > nums[right]){
                end = right -1;
            }
            else {
                start = left;
                end = right;
            }
        }
        return max(nums[start],nums[end]);
    }
};

相关文章

网友评论

    本文标题:牛客-剑指0ffer-旋转数组的最小数字

    本文链接:https://www.haomeiwen.com/subject/kzblrctx.html