剑指offer(六)旋转数组的最小数据

作者: z七夜 | 来源:发表于2018-08-06 12:21 被阅读2次

    写在前面:

    为了增长一下自己的数据结构能力,也为了面试准备,准备将剑指Offer做一下,并与各位分享,希望各位可以对代码以及思路提提建议,欢迎志同道合者,谢谢。

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

    思路

    这个题目有多种结题思路,
    一,可以直接遍历循环后的数组,然后得到最小的数据
    二,这个是旋转数组,把数组前面的一段数据放在后面去,比如原数组为 1,2,3,4,5 旋转之后为 3,4,5,1,2 然后我们从最后一位和第一位比较,都是比第一位小的,当比到5的时候,就会比前面的大,我们就可以取到最小的值,这样比的次数少一点,还有一种情况就是原数组为1,2,3,4,5旋转之后还是1,2,3,4,5 那么比到最后也不行,那么我们直接返回数组第一位

    本文实现二种方法

    package com.itzmn.offer;
    
    /**
     * @Auther: 张梦楠
     * @Date: 2018/7/28 11:11
     * 简书:https://www.jianshu.com/u/d611be10d1a6
     * 码云:https://gitee.com/zhangqiye
     * @Description:
     */
    public class Offer6 {
    
    
        public static void main(String[] args) {
    
            int[] array = {1,2,3,4};
            int i = new Offer6().minNumberInRotateArray(array);
            System.out.println(i);
    
        }
    
       /* public int minNumberInRotateArray(int [] array) {
    
            if (array.length == 0){
                return 0;
            }
            int k=0;
            for (int i=0;i<array.length;i++){
                if (array[i]<array[k]){
                    k=i;
                }
            }
            return array[k];
        }
    */
       public int minNumberInRotateArray(int [] array) {
    
           if (array.length == 0 ){
               return 0;
           }else {
    
               for (int i=0;i<array.length-1;i++){
                   if (array[0]>array[i]){
                       return array[i];
                   }
               }
    
               return array[0];
           }
       }
    
    }
    
    

    希望大家可以多多指点,优化一下,
    QQ群:552113611

    相关文章

      网友评论

        本文标题:剑指offer(六)旋转数组的最小数据

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