image.png
image.png

二分查找

  1. public int search(int[] nums, int target) {
  2. if (nums == null || nums.length == 0) {
  3. return -1;
  4. }
  5. int mid,start = 0,end = nums.length - 1;
  6. while (start <= end) {
  7. mid = start + (end - start) / 2; //防止越界
  8. if (nums[mid] == target) { //中间值是目标值则直接返回
  9. return mid;
  10. }
  11. //如果前半部分有序,注意此处用小于等于
  12. if (nums[start] <= nums[mid]) {
  13. //如果target在前半部分 将end-1
  14. if (target >= nums[start] && target < nums[mid]) {
  15. end = mid - 1;
  16. } else { //如果target在前半部分 将start+1
  17. start = mid + 1;
  18. }
  19. } else { //如果后半部分有序
  20. //如果target在后半部分
  21. if (target <= nums[end] && target > nums[mid]) {
  22. start = mid + 1;
  23. } else { //如果target在前半部分
  24. end = mid - 1;
  25. }
  26. }
  27. }
  28. return -1;
  29. }