LeetCode | # 33. Search in Rotated Sorted Array

mac2024-06-02  31

33. Search in Rotated Sorted Array

Description

描述:https://leetcode.com/problems/search-in-rotated-sorted-array/description/ 题意:在旋转有序数组中,查找指定的数,时间复杂度要求O(log n)。

Solution: (Java)

class Solution { public int search(int[] nums, int target) { int left = 0, right = nums.length-1; int mid; while (left <= right) { mid = (left+right) / 2; if (nums[mid] == target) return mid; if (nums[mid] < nums[right]) { // 右半边有序 if (nums[mid] < target && target <= nums[right]) left = mid + 1; else right = mid - 1; } else { // 左半边有序 if (nums[left] <= target && target < nums[mid]) right = mid - 1; else left = mid + 1; } } return -1; } }

思路

本题的思路是二分查找,但需要做一些变化,注意的点:

旋转有序数组有一个特性,就是总有左半边或者右半边是有序的,利用这一点,来确定二分查找时该缩小到左半边还是右半边;关键是确定左半边有序还是右半边有序:中间(mid)的数小于最右边(right)的数时,则右半边有序,否则左半边有序(与 left 比较也可以,注意要 mid 大于等于 left );确定哪边有序之后,再确定是否在有序的半边继续搜索或者换另一边。
最新回复(0)