zoukankan      html  css  js  c++  java
  • Search for a range, 在一个可能有重复元素的有序序列里找到指定元素的起始和结束位置

    问题描述:给定一个有序序列,找到指定元素的起始和结束位置。例如:1234555,5,起始4结束6

    算法分析:其实就是一个二分查找的利用。但是特殊就在不是找到某个元素,而是找到下标。也就是在nums[mid]=target时,要分析mid的左右元素。

    public int[] searchRange(int[] nums, int target)
        {
            if(nums == null || nums.length == 0)
            {
                return null;
            }
            int[] arr = {-1,-1};
            binarySearch(nums, 0, nums.length - 1, target, arr);
            return arr;
        }
        
        public void binarySearch(int[] nums, int left, int right, int target, int[] arr)
        {
            int mid = (left + right)/2;
            if(left > right)
            {
                return;
            }
            if(nums[left] == target && nums[right] == target)//特例
            {
                arr[0] = left;
                arr[1] = right;
                return;
            }
            if(nums[mid] == target)
            {
                int templ = mid, tempr = mid;
                while(templ>=left && nums[templ]==target)
                {
                    templ --;
                }
                arr[0] = templ+1;
                while(tempr<=right && nums[tempr]==target)
                {
                    tempr ++;
                }
                arr[1] = tempr-1;
            }
            else if(nums[mid] < target)
            {
                binarySearch(nums, mid + 1, right, target, arr);
            }
            else
            {
                binarySearch(nums, left, mid - 1, target, arr);
            }
        }
  • 相关阅读:
    使用ConfigFilter
    读取特定文件,替换第一行内容
    sqlserver,oracle,mysql等的driver驱动,url怎么写
    Excel 数字处理
    ResultMap详解
    正则表达式
    Tomasulo algorithm
    scoreboarding
    data hazard in CPU pipeline
    差分绕线间距对阻抗的影响
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5575302.html
Copyright © 2011-2022 走看看