首页 > 编程语言 > 详细

【二分查找】面试题53 - I. 在排序数组中查找数字 I

时间:2020-05-05 17:06:07      阅读:90      评论:0      收藏:0      [点我收藏+]

题目:

技术分享图片

 

 

解答:

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

 

【二分查找】面试题53 - I. 在排序数组中查找数字 I

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

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