leetcode/src/s0034_find_first_and_last_p...

68 lines
1.3 KiB
C++
Raw Normal View History

2022-11-21 13:10:37 +00:00
#include "s0034_find_first_and_last_position_of_element_in_sorted_array.hpp"
2022-11-24 08:44:36 +00:00
// 闭区间写法
2022-11-30 10:20:36 +00:00
vector<int> S0034::searchRange1(vector<int>& nums, int target) {
int len = nums.size();
2022-11-24 08:44:36 +00:00
int l{0};
int r = len - 1;
while (l <= r) {
int m = (l + r) >> 1;
if (target < nums[m]) {
r = m - 1;
} else if (nums[m] < target) {
l = m + 1;
2022-11-21 13:10:37 +00:00
} else {
2022-11-24 08:44:36 +00:00
l = r = m;
while (l >= 0) {
if (nums[l] == target) {
--l;
} else {
break;
}
}
while (r <= len - 1) {
if (nums[r] == target) {
++r;
} else {
break;
}
}
2022-11-30 10:20:36 +00:00
return vector<int>{l + 1, r - 1};
2022-11-21 13:10:37 +00:00
}
}
2022-11-30 10:20:36 +00:00
return vector<int>{-1, -1};
2022-11-24 08:44:36 +00:00
}
// 开区间写法
2022-11-30 10:20:36 +00:00
vector<int> S0034::searchRange2(vector<int>& nums, int target) {
int len = nums.size();
2022-11-24 08:44:36 +00:00
int l{0};
int r = len;
while (l < r) {
int m = (l + r) >> 1;
if (target < nums[m]) {
r = m;
} else if (nums[m] < target) {
l = m + 1;
} else {
l = r = m;
while (l >= 0) {
if (nums[l] == target) {
--l;
} else {
break;
2022-11-21 13:10:37 +00:00
}
}
2022-11-24 08:44:36 +00:00
while (r <= len - 1) {
if (nums[r] == target) {
++r;
} else {
break;
2022-11-21 13:10:37 +00:00
}
}
2022-11-30 10:20:36 +00:00
return vector<int>{l + 1, r - 1};
2022-11-21 13:10:37 +00:00
}
}
2022-11-30 10:20:36 +00:00
return vector<int>{-1, -1};
2022-11-21 13:10:37 +00:00
}