题解 | #旋转数组的最小数字#

旋转数组的最小数字

http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

思路一、 java方法实现,通过set的无法存储重复值得特性,然后通过TreeSet的排序特性进行获取最小值。 代码实现:

        Set<Integer>set=new TreeSet<>();
        for (int i=0;i<array.length;i++){
            set.add(array[i]);
        }
        Object[] a = set.toArray();
        return (int) a[0];
         }

这种思路虽然能解决问题,但是这样结果的话显然没有利用到旋转数组这一特性。下面是用二分法,利用旋转数组的特性解决问题的思路。

        int end=array.length-1;
        while (start<end){
            int mid=(start+end)/2;
            //如果坐标位mid的值小于最后一个值,则最小的值就可能位mid前面的值或者mid本身,这时候就可使end=mid;
            if (array[mid]<array[end]){
                end=mid;
            }else if (array[mid]>array[end]){//如果坐标mid的值大于最有一个值,那么最小的值显然要在当前值的前面。
                start=mid+1;
            }else{//如果相等的话,就说明最小值在坐标位end的值的前面。
                end=end-1;
            }

        }
        return array[start];
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务