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];
        }
    }
    
    
  • 相关阅读:
    IDEA 使用 Gradle 创建 Java 项目
    Java HttpsUnits 工具类实现 Https
    Android Thread 常用方法
    Android Handler、Message 常用方法
    Android 透明导航键遮挡布局
    Android 通过 JDBC 连接远程数据库
    python 连接数据库
    备份及更新 Portainer
    secureCRT免密码登陆Linux
    Linux vi 编辑器常见命令的使用
  • 原文地址:https://www.cnblogs.com/ITxiaolei/p/13138709.html
Copyright © 2011-2022 走看看