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

    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].

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

    本题开始确实能够想到二分查找,但是,却并不知道如何取得最左面和最右面值==target的索引,本题的二分查找是查找两次,一次是找最左面的值==target的索引,一次是找最右面的值==target的索引,拿最左面举例,以上题为例,在7,8之间进行划分,也就是说mid>=和mid<分成两种情况,接下来就是二分查找了,代码如下:

     1 public class Solution {
     2     public int[] searchRange(int[] nums, int target) {
     3         if(nums==null||nums.length==0) return new int[]{-1,-1};
     4         int left = 0;
     5         int right = nums.length-1;
     6         while(left<right){
     7             int mid = left +(right-left)/2;
     8             if(nums[mid]>=target){
     9                 right = mid;
    10             }else{
    11                 left = mid+1;
    12             }
    13         }
    14         if(nums[left]!=target) return new int[]{-1,-1};
    15         int left_index = left;
    16         right = nums.length-1;
    17         while(left<right){
    18             int mid = left+(right-left)/2+1;
    19             if(nums[mid]<=target) left  =mid;
    20             else{
    21                 right = mid-1;
    22             }
    23         }
    24         int right_index = left;
    25         return new int[]{left_index,right_index};
    26     }
    27 }
    28 //the time complexity of this one could be O(logn), the space complexity could be O(1);
  • 相关阅读:
    关于JAVA中HashMap集合的的三种超不好记的便利方案
    浅谈面向对象三大特性
    新鲜出炉springmvc
    看看我们以前搞过的几个对象
    在java中使用JDBC访问数据库
    关于多线程的小例子,快速上手!无需停留!!!
    关于java异常处理的面试题
    关于java异常处理
    关于java的log4j配置
    总结
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6477930.html
Copyright © 2011-2022 走看看