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

    题目:

    Given a sorted array of integers, 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].  (Medium)

    分析:

    标准的二分搜索题,找一个target的范围,也就是first position 元素等于target 和last position元素等于。

    写两次二分搜索,注意中间start,end的变化情况的不同,一个为了保留住第一个满足条件的,一个为了保留住最后一个满足条件的。

    代码:

     1 class Solution {
     2 public:
     3     vector<int> searchRange(vector<int>& nums, int target) {
     4         vector<int> result;
     5         if (nums.size() == 0) {
     6             return result;
     7         }
     8         int start = 0, end = nums.size() - 1;
     9         while (start + 1 < end) {
    10             int mid = start + (end - start) / 2;
    11             if (nums[mid] < target) {
    12                 start = mid;
    13             }
    14             else {
    15                 end = mid;
    16             }
    17         }
    18         if (nums[start] == target) {
    19             result.push_back(start);
    20         }
    21         else if (nums[end] == target) {
    22             result.push_back(end);
    23         }
    24         
    25         start = 0;
    26         end = nums.size() - 1;
    27         while (start + 1 < end) {
    28             int mid = start + (end - start) / 2;
    29             if (nums[mid] <= target) {
    30                 start = mid;
    31             }
    32             else {
    33                 end = mid;
    34             }
    35         }
    36         if (nums[end] == target) {
    37             result.push_back(end);
    38         }
    39         else if (nums[start] == target) {
    40             result.push_back(start);
    41         }
    42         if (result.size() != 0) {
    43             return result;
    44         }
    45         else {
    46             return vector<int> {-1, -1};
    47         }
    48     }
    49 };
     
  • 相关阅读:
    42.OC中instancetype与id的区别
    41.App 框架的搭建思路以及代码的规范
    44、WebStrom下载和破解
    40、IOS自动打包-Python脚本
    39、字符串去除空格
    38、当前时间是否在开放时间内(也就是时间对比)
    37、自定义气泡
    36、NSTimer使用详解-开启、关闭、移除
    35、输入框(UITextField)密码明暗文切换
    34、iOS App图标和启动画面尺寸
  • 原文地址:https://www.cnblogs.com/wangxiaobao/p/5800792.html
Copyright © 2011-2022 走看看