剑指 - 旋转数组的最小数字

旋转数组的最小数字

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

给出三种实现思路,不过还是改进后的暴力最快,256 ms 左右;内置排序是 400ms ,应该是因为基本有序,所以对于快排更不友好

O(n),因为要将数加入堆中

import java.util.*;

public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int[] arr = array;
        if (arr == null || arr.length < 1){
            return 0;
        }
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();
        for (int i = 0; i < arr.length; i++){
            minHeap.offer(arr[i]);
        }
        return minHeap.poll();
    }
}

暴力

import java.util.*;

public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int[] arr = array;
        if (arr == null || arr.length < 1){
            return 0;
        }
        int res = Integer.MAX_VALUE;
        for (int i = 0; i < arr.length; i++){
            res = arr[i] < res ? arr[i] : res;
        }
        return res;

可以改进,不用每次都遍历到底的:

import java.util.*;

public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int[] arr = array;
        if (arr == null || arr.length < 1){
            return 0;
        }
        int res = arr[0];
        for (int i = 0; i < arr.length - 1; i++){
            if(arr[i] > arr[i+1]){
                res = arr[i+1];
                break;
            }
        }
        return res;
    }
}

内置排序

内置实现的是三项切分快排,时间复杂度最坏 O(nlogn),

import java.util.*;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int[] arr = array;
        if (arr == null || arr.length < 1){
            return 0;
        }
        Arrays.sort(arr);
        return arr[0];
    }
}
全部评论

相关推荐

头像 会员标识
11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务