zoukankan      html  css  js  c++  java
  • Search for a Range

    Given a sorted array of integers, find the starting and ending position of a given target value.

    Your algorithm's runtime complexity must be in the order of O(log n).

    If the target is not found in the array, return [-1, -1].

    For example,
    Given [5, 7, 7, 8, 8, 10] and target value 8,
    return [3, 4].

    边界条件很恶心。

    主要思想是:

    1.左边界的前一个数要小于target,右边界的后一个数要大于target

    2.如果没有边界左(右)的数,则可以直接返回

    class Solution {
    public:
        vector<int> searchRange(int A[], int n, int target) {
            vector<int> re;
            re.push_back(-1);
            re.push_back(-1);
            if(n < 1)
            {
    
                return re;
            }
            re[0]=findleft(A,n,target);
            re[1]=findright(A,n,target);
            return re;
            
    
        }
        
        int findleft(int A[],int n,int target)
        {
            int left = 0; 
            int right = n-1;
            if(A[0]==target)return 0;
            while(left <= right)
            {
                int mid = left + (right - left)/2;
                if(A[mid] == target &&( mid-1 >=0 &&A[mid-1] < target|| mid ==0))return mid;
                if(A[mid] >= target )//&& mid-1 >=0 &&A[mid-1] == target)
                {
                    right = mid -1;
                }
                else if(A[mid] < target)
                {
                    left = mid+1;
                }
            }
            return -1;
        }
        int findright(int A[],int n,int target)
        {
            int left = 0; 
            int right = n-1;
            if(A[n-1]==target)return n-1;
            while(left <= right)
            {
                int mid = left + (right - left)/2;
                if(A[mid] == target && (mid+1 <n &&A[mid+1] > target || mid+1 == n))return mid;
                if(A[mid] > target )
                {
                    right = mid -1;
                }
                else if(A[mid] <= target )//&& mid+1<n && A[mid+1]==target )
                {
                    left = mid+1;
                }
            }
            return -1;
        }
    };
    

      

  • 相关阅读:
    HDOJ/HDU 2352 Verdis Quo(罗马数字与10进制数的转换)
    HDOJ/HDU 2203 亲和串(简单的判断~Java的indexOf()方法秒)
    HDOJ/HDU 2163 Palindromes(判断回文串~)
    js之函数
    js琐碎知识点
    position
    css属性background
    图片展示失效容错处理
    文字打点
    浮动的一些知识点
  • 原文地址:https://www.cnblogs.com/pengyu2003/p/3667500.html
Copyright © 2011-2022 走看看