剑指Offer-6.旋转数组的最小数字(C++/Java)

题目:

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

分析:

这道题和LeetCode上153,154是一样的。只不过153的数组元素是不重复的,154则允许数组有重复元素。

这里直接要求输入的是非递减排序的数组,所以和154题是一样的。

LeetCode 153. Find Minimum in Rotated Sorted Array寻找旋转排序数组中的最小值 (C++)

LeetCode 154. Find Minimum in Rotated Sorted Array II寻找旋转排序数组中的最小值 II (C++)

需要看分析的可以移步到153,154中查看题目的分析。

程序:

C++

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(rotateArray.empty())
            return 0;
        return find(rotateArray, 0, rotateArray.size()-1);
    }
    int find(vector<int> &nums, int l, int r){
        if(nums[l] < nums[r] || l == r)
            return nums[l];
        int mid = l + (r - l) / 2;
        return min(find(nums, l, mid), find(nums, mid+1, r));
    }
};

Java

import java.util.ArrayList;
import java.util.*;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length == 0)
            return 0;
        return find(array, 0, array.length-1);
    }
    public int find(int[] array, int l, int r){
        if(array[l] < array[r] || l == r)
            return array[l];
        int mid = l + (r - l) / 2;
        return Math.min(find(array, l, mid), find(array, mid+1, r));
    }
}

猜你喜欢

转载自www.cnblogs.com/silentteller/p/11832273.html