
剑指 Offer 53 - I. 在排序数组中查找数字 I - 力扣(LeetCode) (leetcode-cn.com)
首先放上运行结果 思路所有的查找都是二分查找。首先查找到一个target出现的位置,然后再在这个位置之前找到target首次出现的位置的前一个位置,然后再在这个位置之后找到target最后一次出现的位置,两个位置之差即为target出现的总次数。
代码class Solution {
public:
int search(vector& nums, int target) {
int beg = 0, end = nums.size(), mid;
while ((mid = beg + (end - beg) / 2) != end) {
if (nums[mid] > target) end = mid;
else if (nums[mid] < target) beg = mid + 1;
else return get_end(nums, beg, end, target) - get_front(nums, beg, end, target);
}
return 0;
}
int get_front(vector& nums, int beg, int end, int target) {
if (nums[beg] == target) return beg - 1;
int mid, halfsize;
while (halfsize = (end - beg) / 2) {
mid = beg + halfsize;
nums[mid] != target ? beg = mid : end = mid;
}
return beg;
}
int get_end(vector& nums, int beg, int end, int target) {
int mid, halfsize;
while (halfsize = (end - beg) / 2) {
mid = beg + halfsize;
nums[mid] == target ? beg = mid : end = mid;
}
return beg;
}
};
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)