zoukankan      html  css  js  c++  java
  • [LeetCode]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].

    思考:3次二分搜索。第一次看是否存在target,第二次寻找最左下标,第三次寻找最右下标。

    class Solution {
    private:
    	vector<int> ret;
    public:
        vector<int> searchRange(int A[], int n, int target) {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
    		ret.clear();
    		int left=-1;
    		int right=-1;
    		int i=0;
    		int j=n-1;
    		int mid;
    		bool flag=false;
    		while(i<=j)
    		{
    			mid=(i+j)>>1;
    			if(A[mid]>target) j=mid-1;
    			else if(A[mid]<target) i=mid+1;
    			else
    			{
    				flag=true;
    				left=mid;
    				right=mid;
    				int a=i;
    				int b=j;
    				while(a<=left)
    				{ 
    					mid=(a+left)>>1;
    					if(A[mid]<target) a=mid+1;
    					else if((mid>0&&A[mid-1]!=target)||mid==0)//考虑边界情况
    					{
    						left=mid;
    						break;
    					}
    					else left=mid-1;
    				}
    				while(right<=b)
    				{ 
    					mid=(right+b)>>1;
    					if(A[mid]>target) b=mid-1;
    					else if((mid<n-1&&A[mid+1]!=target)||mid==n-1) 
    					{
    						right=mid;
    						break;
    					}
    					else right=mid+1;
    				}
    				if(flag)
    				{
    				    ret.push_back(left);
    			     	ret.push_back(right);
    				}
    				return ret;
    			}
    		}
    		ret.push_back(-1);
    		ret.push_back(-1);
    		return ret;
        }
    };
    

          囧,第一次二分完全多余。。

  • 相关阅读:
    聊聊、最新 IDEA 2019.3.3 版本 注册码 有效期 2089
    聊聊、Spring自动扫描器
    聊聊、JVM 第一篇
    聊聊、AES 和 DES
    聊聊、Spring WebApplicationInitializer
    聊聊、Java SPI
    聊聊、Spring ServletContainerInitializer
    《Redis
    《Redis
    《Redis
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3432250.html
Copyright © 2011-2022 走看看