zoukankan      html  css  js  c++  java
  • leetcode154

    /*这个题目如果要求不重复元素二分就非常简单
    含有重复元素就需要处理一些特殊的数据类型
    例如[1,1,1,1] [1, 3,5]这些特判很简单
    [10,10,10,10,10,1,10]
    [10,1,10,10,10,10,10]
    这种nums[mid] = nums[right]的情况挖坑数据就比较多
    需要更进一步的分类
    nums[mid] nums[mid-1] nums[mid+1]的区分情况
    最差情况是nums[mid] = nums[right] = nums[mid-1] = nums[mid] + 1
    这种处理情况选择粗暴线性扫[left,right]维护一个最小值*/
    class Solution {
    public:
        int minArray(vector<int>& numbers) {
             
            int len = numbers.size();
            
    
            int left , right , mid;
            left = 0;right = len - 1;
            if(len == 2) return min(numbers[left] , numbers[right]);
    
            while(left < right){
                if(numbers[left] < numbers[right]) return numbers[left];
                mid = (left + right)/2;
                if(numbers[mid] > numbers[right])       left = mid + 1;
                else if(numbers[mid] < numbers[right])  right = mid;
                else{
                     int Min = numbers[left];
                     if(numbers[mid] == numbers[mid + 1] && numbers[mid] == numbers[mid - 1]) {
                            for(int i = left;i <= right;i++)
                              Min = min(numbers[i] , Min);
                      return Min;
                     }
                else if(numbers[mid] == numbers[mid - 1] && numbers[mid] != numbers[mid + 1]) left = mid + 1;
                else if(numbers[mid] == numbers[mid + 1] && numbers[mid] != numbers[mid - 1]) right = mid;
                }
                
            }
            return numbers[left];
        }
    };
  • 相关阅读:
    主键、外键
    框架学习八:Model查询
    框架学习七:自动验证、填充、字段映射
    框架学习六:ORM方式添加数据
    11.0 C++远征:对象指针
    10.0 C++远征:深拷贝与浅拷贝
    9.0 C++远征:对象成员
    8.0 C++远征:对象数组
    7.0 C++远征:封装小结
    2.0 C++远征:类内定义与内联函数
  • 原文地址:https://www.cnblogs.com/rhythmic/p/13803041.html
Copyright © 2011-2022 走看看