zoukankan      html  css  js  c++  java
  • 剑指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];
        }
    }
    
  • 相关阅读:
    web测试方法总结
    APP测试点总结
    函数初识
    字符编码及文件操作
    简单购物车程序(Python)
    基本数据类型(列表,元祖,字典,集合)
    python基础
    基本数据类型(数字和字符串)
    Python入门
    操作系统
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13358645.html
Copyright © 2011-2022 走看看