• 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];
        }
    };
  • 相关阅读:
    javascript 图片 滚动加载
    jquery 插件整合在一起的写法
    javascript setInterval createElement
    javascript createDocumentFragment
    javascript 设置元素样式 函数
    javascript 添加元素
    javascript 简单的改变样式的方法
    javascript 原生 左右滚动
    javascript 获取 class和id 的写法
    jquery 动态添加 图片
  • 原文地址:https://www.cnblogs.com/rhythmic/p/13803041.html
Copyright © 2020-2023  润新知