zoukankan      html  css  js  c++  java
  • 剑指offer:面试题8、旋转数组的最小数字

    题目描述

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

    代码示例

    public class Offer8 {
        public static void main(String[] args) {
            int[] nums = {3,4,5,1,2};
            int[] nums2 = {1,1,1,1,0,1,1};
            Offer8 testObj = new Offer8();
            System.out.println(testObj.minNumInRotateArray(nums));
            System.out.println(testObj.minNumInRotateArray(nums2));
            System.out.println(testObj.minNumInRotateArray2(nums2));
        }
    
        //数组中没有重复数字的情况
        public int minNumInRotateArray(int[] nums) {
            if (nums.length == 0) {
                return 0;
            }
            int low = 0;
            int high = nums.length - 1;
            while (low < high) {
                int mid = low + (high - low) / 2;
                if (nums[mid] <= nums[high]) {
                    high = mid;
                } else {
                    low = mid + 1;
                }
            }
            return nums[low];
        }
    
        //数组中有重复数字的情况
        public int minNumInRotateArray2(int[] nums) {
            if (nums.length == 0) {
                return 0;
            }
            int low = 0;
            int high = nums.length - 1;
            while (low < high) {
                int mid = low + (high - low) / 2;
                if (nums[low] == nums[mid] && nums[mid] == nums[high]) {
                    return minNumber(nums, low, high);
                } else if (nums[mid] <= nums[high]) {
                    high = mid;
                } else {
                    low = mid + 1;
                }
            }
            return nums[low];
        }
    
        private int minNumber(int[] nums, int low, int high) {
            for (int i = low; i < high; i++) {
                if (nums[i] > nums[i + 1]) {
                    return nums[i + 1];
                }
            }
            return nums[low];
        }
    }
    
    
  • 相关阅读:
    Docker入门
    KMP算法
    spring boot整合Thymeleaf
    thymeleaf公共页面元素抽取
    入门oj 6492: 小B的询问
    入门oj 6451: The XOR Largest Pair之二
    入门oj 5499: 讲话模式
    把Windows CA根证书安装到iPhone
    笔记本电脑键盘状态助手KeyboardState
    开启Windows7多用户远程桌面
  • 原文地址:https://www.cnblogs.com/ITxiaolei/p/13138709.html
Copyright © 2011-2022 走看看