查找算法——006查找旋转数组中的最小数字

1,问题描述

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

2,解题思路

先吐槽一下,看到网上很多解题思路,超麻烦,包括自己手写数组的排序算法,搞什么下标变换等等,或许效率会高些,但是有必要吗?剑指offer的题,不管用什么方法做出来都行吧?可以用java封装好的一些方法吧?而且,我觉得在满足答题要求的情况下,不是思路越简单越好?非得搞的很复杂才能拿到offer。。。。?望有经验的大神给回答下,是不是只要能通过答题就能得到面试官的认同。。。。

(1)方法一:

  • 第一步:判断数组长度是否为0,若是则直接返回0,否则进行第二步。
  • 第二步:先对数组进行排序,排序方法多种多样,但是我觉得java中的Arrays类已经封装好了对数组排序的方法,而且非常高效,就别自己写了吧。。。。有时间再写写。
  • 第三步:Arrays.sort()方法默认的是升序排列,所以取排序好的数组第一个元素就行了。

(2)方法二:

  • 第一步:同方法一
  • 第二步:假设数组第一个元素为最小元素min
  • 第三步;遍历整个数组,将数组中的每个元素与min进行比较,每次比较将较小的元素赋值给min
  • 第四步:返回min,即整个数组的最小值

3,源码

(1)方法一:

import java.util.Arrays;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if (array.length == 0){
            return 0;
        }else {
            Arrays.sort(array);
            return array[0];
        }
    }
}

运行结果:

(2)方法二:

public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length == 0){
            return 0;
        }else{
            int min = array[0];
            for(int i=0;i<array.length;i++){
                if(array[i] <= min){
                    min = array[i];
                }
            }
            return min;
        }
    }
}

运行结果:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值