• 剑指Offer 11 旋转数组最小数字


    剑指Offer 11 旋转数组最小数字

    • 错误代码
    //部分有序数组查找: 改进二分法
    class Solution {
        public int minArray(int[] numbers) {
            //单元素
            if(numbers.length==1) return numbers[0];
            //未旋转
            else if(numbers.length>1 
                && numbers[0]<numbers[numbers.length-1])
                return numbers[0];
            
            /*出错点*/
            /*去重复(左端、右端包含重复元素),需要每次将左右指针挪到最内侧重复元素位置处*/
            ......
    
            int mid = left + (right-left)/2;
            while(left < right-1) {
                //右端,选左边
                if(numbers[mid]<=numbers[left]) {
                    right = mid;
                }
                //左端,选右边
                else if(numbers[mid]>=numbers[right]) {
                    left = mid;
                }
                mid = left + (right-left)/2;
            }
            
            return numbers[right];
        }
    }
    
    • 官方题解(二分法)
    class Solution {
        public int minArray(int[] numbers) {
            int low = 0;
            int high = numbers.length - 1;
            while (low < high) {
                int pivot = low + (high - low) / 2;
                if (numbers[pivot] < numbers[high]) {
                    high = pivot;
                } else if (numbers[pivot] > numbers[high]) {
                    low = pivot + 1;
                } 
                /*去重复*/
                else {
                    high -= 1;
                }
            }
            return numbers[low];
        }
    }
    
  • 相关阅读:
    AD 文档信息设置和制作模板
    用AT命令调试调制解调器
    语音AT命令参考
    传真AT指令部分(参考)
    传真调制解调器
    knockout+weui+zepto
    20171028随手记
    20171027随记
    一些简单又坑人的无聊使用
    ReadWrite,日志,输入文本
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13358645.html
Copyright © 2020-2023  润新知