• 寻找排序数组中的最小值


    题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。比如数组[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));
        }
    }
  • 相关阅读:
    XML的学习
    使用WEB应用时后台发生的事
    企业级应用与互联网应用的区别
    学习JAVA EE的目标
    关于AngularJS的学习报告
    在线进销存软件
    Gridview 实现列表全选、自动选择下级item的功能
    python 计算roc程序报错ValueError: bad input shape (5313, 2)
    pandas保存为hdf格式更高效
    Linux 安装
  • 原文地址:https://www.cnblogs.com/yeleia/p/10058696.html
Copyright © 2020-2023  润新知