• 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;
    	}
    };
    
  • 相关阅读:
    js 生成32位UUID方法
    win10把控制声音改成和win7一样
    jQuery.inArray()方法
    在eclipse中安装activiti插件
    关于NOIP运输计划一题几种思路和若干种做法的研究
    该博客停止更新
    [CTSC2010]产品销售
    roi 学习轨迹
    「PA 2019」Szprotki i szczupaki
    LOJ576签到游戏
  • 原文地址:https://www.cnblogs.com/lengender-12/p/6836162.html
Copyright © 2020-2023  润新知