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];
        }
    };
  • 相关阅读:
    新浪微博爬虫项目
    time
    黑客增长
    python2 3 区别
    爬虫高性能相关
    登录_爬取并筛选拉钩网职位信息_自动提交简历
    破解极验验证码
    tesseract-ocr 传统验证码识别
    刻意练习
    计算学员的考试总成绩以及平均成绩
  • 原文地址:https://www.cnblogs.com/rhythmic/p/13803041.html
Copyright © 2011-2022 走看看