zoukankan      html  css  js  c++  java
  • Leetcode: 34. Search for a Range

    Description

    Given an array of integers sorted in ascending order, 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].

    Example

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

    思路

    • 二分查找
    • 两次二分,分别查找左边起点和右边终点
    • 对应于代码中flag = 1,找左边;flag = 0, 找右边

    代码

    class Solution {
    public:
        vector<int> searchRange(vector<int>& nums, int target) {
    		vector<int> res;
    		int len = nums.size();
    		
    		res.push_back(binarySearch(nums, len, target, 1));
    		res.push_back(binarySearch(nums, len, target, 0));
    
    		return res;
    	}
    
    	int binarySearch(vector<int>& nums, int len, int target, int flag){
    		int low = 0, high = len - 1;
    		int mid = 0;
    		while (low <= high){
    			mid = low + (high - low) / 2;
    
    			if (nums[mid] == target){
    				if (flag){
    					if (mid == low || mid - 1 >= low && nums[mid - 1] < nums[mid])
    						return mid;
    					else high = mid - 1;
    				}
    				else{
    					if (mid == high || mid + 1 <= high && nums[mid + 1] > nums[mid])
    						return mid;
    					else low = mid + 1;
    				}
    			}
    			else if (nums[mid] > target)
    				high = mid - 1;
    			else low = mid + 1;
    		}
    
    		return -1;
    	}
    };
    
  • 相关阅读:
    获取CheckBox的Text值
    动态绑定数据至Html Table
    二次事件并细化功能
    ASP.NET MVC的JavaScriptResult
    Google Earth 8.0
    ASP.NET MVC的ContentResult
    ASP.NET MVC使用input标签上传文件
    处理动态SQL语句的参数
    Infor SyteLine如何快速锁定用户
    执行git push出现"Everything up-to-date"
  • 原文地址:https://www.cnblogs.com/lengender-12/p/6836162.html
Copyright © 2011-2022 走看看