首页 > 编程语言 > 详细

【二分查找】34. 在排序数组中查找元素的第一个和最后一个位置(搜索范围(Search for a Range))

时间:2020-05-05 13:08:23      阅读:56      评论:0      收藏:0      [点我收藏+]

题目:

技术分享图片

 

 

解答:

 1 class Solution {
 2 public:
 3     vector<int> searchRange(vector<int>& nums, int target) 
 4     {
 5         vector<int> range(2, -1);
 6 
 7         range[0] = left_bound(nums, target);
 8         range[1] = right_bound(nums, target);
 9         
10         return range;
11     }
12 
13     int left_bound(vector<int> nums, int target) 
14     {
15         int left = 0;
16         int right = nums.size() - 1;
17 
18         while (left <= right) 
19         {
20             int mid = left + (right - left) / 2;
21 
22             if (nums[mid] < target) 
23             {
24                 left = mid + 1;
25             } 
26             else if (nums[mid] > target) 
27             {
28                 right = mid - 1;
29             } 
30             else if (nums[mid] == target) 
31             {
32                 // 别返回,收缩左侧边界
33                 right = mid - 1;
34             }
35         }
36         
37         // 最后要检查 left 越界的情况
38         if (left >= nums.size() || nums[left] != target)
39         {
40             return -1;
41         }
42         return left;
43     }
44 
45 
46     int right_bound(vector<int> nums, int target) 
47     {
48         int left = 0;
49         int right = nums.size() - 1;
50 
51         while (left <= right) 
52         {
53             int mid = left + (right - left) / 2;
54 
55             if (nums[mid] < target) 
56             {
57                 left = mid + 1;
58             } 
59             else if (nums[mid] > target) 
60             {
61                 right = mid - 1;
62             } 
63             else if (nums[mid] == target) 
64             {
65                 // 别返回,收缩右侧边界
66                 left = mid + 1;
67             }
68         }
69         // 最后要检查 right 越界的情况
70         if (right < 0 || nums[right] != target)
71         {
72             return -1;
73         }
74         return right;
75     }
76 };

 

【二分查找】34. 在排序数组中查找元素的第一个和最后一个位置(搜索范围(Search for a Range))

原文:https://www.cnblogs.com/ocpc/p/12830107.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!