zoukankan      html  css  js  c++  java
  • Leetcode34--->Search for a Range(在排序数组中找出给定值出现的范围)

    题目:给定一个排序数组,找出给定的target值出现的范围;算法复杂度要求在O(logn);如果没有找到,则返回[-1, -1];

    举例:

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

    解题思路:

    一看到题目要求的时间复杂度O(logn),就自然想要要用到二分的方法,这道题目,我们自然也是用二分的方法;

    mid = (start + end) / 2;则target和nums[mid]的关系有三种:

    1) target <nums[mid],则后半部分就被舍弃掉了, end = mid - 1;

    2) target > nums[mid], 则前半部分就被舍弃掉了, start = mid + 1;

    3) target = nums[mid],这种情况不能单纯的舍弃掉哪一半,而是要从中间向两端遍历,直到找到边界为止;

    代码如下:

     1 public class Solution {
     2     public int[] searchRange(int[] nums, int target) {
     3         if(nums == null || nums.length < 1)
     4             return new int[]{-1, -1};
     5         int[] res = new int[2];
     6         res[0] = -1;
     7         res[1] = -1;
     8         int start = 0;
     9         int end = nums.length - 1;
    10         int mid = 0;
    11         while(start <= end)
    12         {
    13             mid = (start + end) / 2;
    14             if(nums[mid] < target)
    15                 start = mid + 1;
    16             else if(nums[mid] > target)
    17                 end = mid - 1;
    18             else
    19             {
    20                 start = mid;
    21                 end = mid;
    22                 while(start >= 0 && nums[start] == target)
    23                     start--;
    24                 while(end < nums.length && nums[end] == target)
    25                     end++;
    26                 return new int[]{start + 1, end - 1};
    27             }
    28         }
    29         return res;
    30     }
    31 }
  • 相关阅读:
    js-事件总结
    iquery-个人总结
    CSS3-页面样式
    野生码农狂奔中的2014年度年终总结
    算不算被虚度的这几年
    在Ubuntu 12.4 下安装 nginx, MySQL, PHP
    使用WP8最新的AudioVideoCaptureDevice类制作录像应用
    WP8 MediaElement 实现循环播放
    WPF(WP7、WP8)多个Listbox嵌套时滚动问题的解决
    Weibo SDK WP版本回调参数没有uid的解决方法
  • 原文地址:https://www.cnblogs.com/leavescy/p/5898940.html
Copyright © 2011-2022 走看看