题目:

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

 

相关文章:

  • 2021-12-09
  • 2022-01-09
  • 2021-10-22
  • 2021-09-30
  • 2021-08-01
  • 2021-09-29
  • 2021-05-30
猜你喜欢
  • 2021-04-19
  • 2021-08-21
  • 2021-05-25
  • 2022-12-23
  • 2021-09-03
  • 2021-07-25
  • 2021-06-06
相关资源
相似解决方案