zoukankan      html  css  js  c++  java
  • LeetCode 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].

    思路:

    1.当数组长度为0时,返回[-1,-1];

    2.当数组长度为1时,判断nums[0]与target关系;

    3.当数组长度大于1时:

    (1)因题目要求时间复杂度O(log n),且整数数组以升序排列,故用二分法找出一个等于target的数组下标。

    (2)起始坐标向前。

    (3)结束坐标向后。

    代码:

     1 public class Solution {
     2     public int[] searchRange(int[] nums, int target) {
     3         int start = 0,end = nums.length-1,mid = 0;
     4         int resStart = -1,resEnd = -1;
     5         int[] resArr={-1,-1};
     6         if(nums.length == 0){
     7             resArr[0] = resArr[1] =-1;
     8             return resArr;
     9         }
    10         if(nums.length == 1){
    11             if(nums[0] == target){
    12                 resArr[0] = resArr[1] =0;
    13                 return resArr;
    14             }else{
    15                 resStart = resEnd =-1;
    16                 return resArr;
    17             }
    18         }
    19         while(start + 1 < end){
    20             mid = start + (end - start)/2;
    21             if(nums[mid] == target){
    22                 resStart = resEnd = mid;
    23                 break;
    24             }else if(nums[mid] > target){
    25                 end = mid;
    26             }else{
    27                 start = mid;
    28             }
    29         }
    30         if(resStart == -1 && nums[start] == target){
    31             resStart = resEnd = start;
    32         }
    33         if(resStart == -1 && nums[end] == target){
    34             resStart = resEnd = end;
    35         }
    36         while(resStart >0){
    37             if(nums[resStart-1] == target){
    38                 resStart--;
    39             }else{
    40                 break;
    41             }
    42         }
    43         while(resEnd < nums.length-1){
    44             if(nums[resEnd+1] == target){
    45                 resEnd++;
    46             }else{
    47                 break;
    48             }
    49         }
    50         resArr[0] = resStart;
    51         resArr[1] = resEnd;
    52         return resArr;
    53     }
    54 }
  • 相关阅读:
    "《算法导论》之‘图’":不带权二分图最大匹配(匈牙利算法)
    "C#":MySql批量数量导入
    MySql常用操作语句(2:数据库、表管理以及数据操作)
    MySql常用操作语句(1:启动、连接数据库及用户操作)
    HTML 段落
    HTML 标题
    HTML 属性
    HTML 元素
    HTML 基础
    HTML 编辑器
  • 原文地址:https://www.cnblogs.com/melbourne1102/p/6652404.html
Copyright © 2011-2022 走看看