一、题目内容

image.png

二、题解

解法1:

思路

二分法,找到目标值后判定,继续向左还是向右

代码

  1. public class Solution {
  2. public static int findLen(int[] nums, int target) {
  3. if (nums == null || nums.length == 0) {
  4. return 0;
  5. }
  6. int left = find(nums, target, true);
  7. int right = find(nums, target, false);
  8. return right - left;
  9. }
  10. private static int find(int[] nums, int target, boolean leftFlag) {
  11. int left = 0, right = nums.length - 1;
  12. while (left < right) {
  13. int mid = (right + left) / 2;
  14. if (nums[mid] < target) {
  15. left = mid + 1;
  16. } else if (nums[mid] > target) {
  17. right = mid - 1;
  18. } else {
  19. //求左还是求右
  20. if (leftFlag) {
  21. right = mid - 1;
  22. } else {
  23. left = mid + 1;
  24. }
  25. }
  26. }
  27. return left;
  28. }
  29. }