-
class Solution { public int search(int[] nums, int target) { int n = nums.length; int l = 0, r = n - 1; while (l <= r) { int mid = (l + r) / 2; if (nums[mid] == target) { return mid; } if (nums[l] <= nums[mid]) { if (nums[l] <= target && target < nums[mid]) { r = mid - 1; } else { l = mid + 1; } } else { if (nums[mid] < target && target <= nums[n - 1]) { l = mid + 1; } else { r = mid - 1; } } } return -1; } }
-
class Solution { public boolean search(int[] nums, int target) { int n = nums.length; int l = 0, r = n - 1; while (l <= r) { int mid = (l + r) / 2; if (nums[mid] == target) { return true; } if (nums[l] == nums[mid] && nums[mid] == nums[r]) { ++l; --r; } else if (nums[l] <= nums[mid]) { if (nums[l] <= target && target < nums[mid]) { r = mid - 1; } else { l = mid + 1; } } else { if (nums[mid] < target && target <= nums[n - 1]) { l = mid + 1; } else { r = mid - 1; } } } return false; } }
-
class Solution { public int findMin(int[] nums) { int low = 0; int high = nums.length - 1; while (low < high) { int mid = low + (high - low) / 2; if (nums[mid] < nums[high]) { high = mid; } else { low = mid + 1; } } return nums[low]; } }
-
class Solution { public int findMin(int[] nums) { int low = 0; int high = nums.length - 1; while (low < high) { int mid = low + (high - low) / 2; if (nums[mid] < nums[high]) { high = mid; } else if (nums[mid] > nums[high]) { low = mid + 1; } else { high--; } } return nums[low]; } }
二分查找
最新推荐文章于 2024-07-04 10:15:20 发布