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


     这道牛客上面的题就是想要找一个数组中的最小值。由题意我们可以知道,这是一个旋转数组。所以我们就需要了解什么是旋转数组。其实就是将一个好的数组,进行了多次的循环右移的操作。所以我们从题意中得到。这个数组是一个非减序的数组。那么我们就会更加清楚这个数组是一个有序的数组。当然我们想要找一个数的时候。我们首先是想到的是进行半分查找。所以在这里我给大家提供一个Cplus中的代码的方法。这个是一个比较好的半分查找方法。

    C++做题方法

    class Solution {
    public:
    int minNumberInRotateArray(vector<int> rotateArray) {
    if(rotateArray.size()==0)return 0;
    int low = 0;
    int high = rotateArray.size()-1;
    while(low<high){
    int mid = (low+high)/2;
    if(rotateArray[mid]>rotateArray[high])
    low = mid +1;
    else if(rotateArray[mid]==rotateArray[high]){
    high = high - 1;
    }
    else
    high = mid;
    }
    return rotateArray[low];
    }
    };

    然后我再给大家提供一种用java中的蛮力法进行数组的遍历,得到的数组的方法。这道题的做法主要的还是思想。这道题主要是为了我们找到最小值。而我们通过找规律,可以大体的知道这个最小的数组的位置是在什么地方。下面不多说,直接上代码。

    java蛮力做题方法

    import java.util.ArrayList;
    public class Solution {
    public int minNumberInRotateArray(int [] array) {
    int j=array.length;
    if (j==0)return 0;
    int res = array[0];
    for (int i = 0; i < array.length - 1; i++){
    if(array[i] > array[i+1]){
    res = array[i+1];
    break;
    }
    }
    return res;

    }
    }

    然后为了感谢广大网友,下面我再用java中的中分法进行做一下。

    import java.util.ArrayList;
    public class Solution {
    public int minNumberInRotateArray(int [] array) {
    int high=array.length;
    if (high==0)return 0;
    int res = array[0];
    int low =0;
    high=high-1;
    int mid;
    while(low < high){
    mid=(low+high)/2;
    if (array[mid]<=array[high]) high=high-1;
    else low=mid+1;
    }
    return array[low];
    }
    }

    在这里我想要说两句了,就是如果你要是实际的操作你就会知道。这里面C++代码的无论是耗时还是空间占用都是比java要小的,而且有的程序是小了很多。C++这个代码很强大的呀。

  • 相关阅读:
    [Golang] 解决 Goland配置GOROOT The selected directory is not a valid home for Go Sdk
    gin bind(重要)
    如何优雅的限制 Kubernetes 节点上运行的 Pod 数量
    postman中 formdata、xwwwformurlencoded、raw、binary的区别
    idea 脚手架
    baselines算法库baselines/bench/monitor.py模块分析
    【转载】 tensorflow变量默认是如何进行初始化的?
    【转载】 pytorch锁死在dataloader(训练时卡死)
    baselines算法库common/retro_wrappers.py模块分析
    使用TensorFlow、Pytorch等深度学习框架时如何设置对OpenCV的使用
  • 原文地址:https://www.cnblogs.com/littleswan/p/11311892.html
Copyright © 2020-2023  润新知