剑指 Offer 53 - I. 在排序数组中查找数字 I
理解好二分法。
利用两次二分法,寻找左右边界,相减。
剑指 Offer 53 - I. 在排序数组中查找数字 I
class Solution { public int search(int[] nums, int target) { int i = 0, j = nums.length - 1; int res = 0; //二分法寻找右边界 /*首先分析while(i <= j)为什么需要等号 * 判断等于的时候,正常情况循环跑完必定j在i左边1位 * 找右边界的话,相等就往右靠,即i = mid + 1 * 找左边界的话,相等就往左靠,即j = mid - 1 */ while(i <= j){ int mid = (i + j) / 2; if(nums[mid] <= target) i = mid + 1; else j = mid - 1; } int right = i; //二分法寻找左边界 i = 0; j = nums.length - 1; while(i <= j) { int mid = (i + j) / 2; if(nums[mid] < target) i = mid + 1; else j = mid - 1; } int left = j; //1 2 2 2 3 //右边界下标为4,左边界下标为0 return right - left - 1; } }