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 start = 0;
  6. int end = nums.length - 1;
  7. int mid;
  8. while (start <= end) {
  9. mid = start + (end - start) / 2;
  10. if (nums[mid] == target) {
  11. return mid;
  12. }
  13. //前半部分有序,注意此处用小于等于
  14. if (nums[start] <= nums[mid]) {
  15. //target在前半部分
  16. if (target >= nums[start] && target < nums[mid]) {
  17. end = mid - 1;
  18. } else {
  19. start = mid + 1;
  20. }
  21. } else {
  22. if (target <= nums[end] && target > nums[mid]) {
  23. start = mid + 1;
  24. } else {
  25. end = mid - 1;
  26. }
  27. }
  28. }
  29. return -1;
  30. }