一、题目
统计一个数字在排序数组中出现的次数。
点击查看原题
难度级别: 简单
二、思路
1)二分法
统计数字在排序数组中出现次数,由于数组是从小到大排序好的,该过程分为两步:
第一步找到数字位置,采用二分法查找更快速 第二步,根据找到数字的位置向两边搜索并统计
三、代码
1)二分法
class Solution {public int search(int[] nums, int target) {int ans = 0;int loc = find(nums, target);int left = loc - 1;while (left >= 0 && nums[left--] == target) { // 向左搜索ans++;}while (loc < nums.length && nums[loc++] == target) { // 向右搜索ans++;}return ans;}private int find(int[] nums, int target) {int s = 0, e = nums.length;while (s < e) {int mid = (s + e) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {s = mid + 1;} else {e = mid;}}return s;}}
C为目标数字出现次数,时间复杂度为O(logn+C),空间复杂度为O(1)
