题目描述
统计一个数字在排序数组中出现的次数。
思路
遍历,计数
代码
class Solution { public int search(int[] nums, int target) { int count = 0; for(int i = 0 ; i < nums.length ; i++){ if(nums[i] == target) count ++; } return count ; } }
优化
忽略了重要信息:排序过的数组
题解
二分搜索
class Solution { public int search(int[] nums, int target) { // 搜索右边界 right int i = 0, j = nums.length - 1; while(i <= j) { int m = (i + j) / 2; if(nums[m] <= target) i = m + 1; else j = m - 1; } int right = i; // 若数组中无 target ,则提前返回 if(j >= 0 && nums[j] != target) return 0; // 搜索左边界 right i = 0; j = nums.length - 1; while(i <= j) { int m = (i + j) / 2; if(nums[m] < target) i = m + 1; else j = m - 1; } int left = j; return right - left - 1; } } 作者:jyd
反思总结
1 思想类似于二分查找,区别还是有的。
2 寻找左边界,只要nums[mid]还大于等于target,j就继续往左逼近。
3 寻找有边界 , 只要nums[mid] 还小于等于target ,i 继续向右毕竟。