zoukankan      html  css  js  c++  java
  • 寻找排序数组中的最小值

    题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。比如数组[0,1,2,3,4,5,6,7]旋转为[4,5,6,7,0,1,2,3],要求找出最小元素。

    public class SearchMin {
        public static int min(int nums[]){
            int length=nums.length;
            int index1=0;
            int index2=length-1;
            int indexMid=index1;
            while (nums[index1]>=nums[index2]){
                if (index2-index1==1){
                    indexMid=index2;
                    break;
                }
                indexMid=(index1+index2)/2;
                if (nums[index1]==nums[index2]&&nums[indexMid]==nums[index1]){
                    return MinOrder(nums,index1,index2);
                }
                if (nums[indexMid]>=nums[index1])
                    index1=indexMid;
                else if(nums[indexMid]<=nums[index2])
                    index2=indexMid;
            }
            return nums[indexMid];
        }
        public static int MinOrder(int numbers[],int index1,int index2){
            int result=numbers[index1];
            for (int i = index1+1; i <=index2 ; i++) {
                if (result>numbers[i])
                    result=numbers[i];
            }
            return result;
        }
    
        public static void main(String[] args) {
            int[] numbers=new int[]{1,0,1,1,1};
            System.out.println(min(numbers));
        }
    
    }

    上面一种是比较完善的,考虑到了元素重复的情况,下面一种的条件是元素不重复

    public class FindMin {
        public static int findMin(int[] nums) {
            if (nums.length == 1 || nums[0] < nums[nums.length - 1]) {
                return nums[0];
            }
            int lo = 0;
            int hi = nums.length - 1;
            while (lo <= hi) {
                int mid = (lo + hi) / 2;
                if (nums[mid] >= nums[0]) {
                    lo = mid + 1;
                } else {
                    hi = mid - 1;
                }
            }
            return nums[lo];
        }
    
        public static void main(String[] args) {
            int nums[]=new int[]{3,4,5,1,2};
            System.out.println(findMin(nums));
        }
    }
  • 相关阅读:
    显示器面板参数
    解决SQL Server 2008安装时提示:重新启动计算机 失败
    SQL Server 的 TSQL 语句的性能评估方法
    判断字母大小写
    linux发展史简介
    下载route命令源码
    TCP糊涂窗口综合症
    QT显示中文
    TCP四个定时器 之 TCP坚持定时器
    android 去ListView滑动阴影
  • 原文地址:https://www.cnblogs.com/yeleia/p/10058696.html
Copyright © 2011-2022 走看看