• 剑指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));
        }
    }
  • 相关阅读:
    python编码
    异常、调试
    python的优点
    循环、判断
    对象
    模块
    函数
    变量
    Socket编程(九)
    进程简单了解和使用
  • 原文地址:https://www.cnblogs.com/silentteller/p/11832273.html
Copyright © 2020-2023  润新知