# 33. Search in Rotated Sorted Array
題目:<https://leetcode.com/problems/search-in-rotated-sorted-array/>
解法:二分搜尋法,切半時其中一半會維持 rotated sorted array,另外一半則會是一般的 sorted array,辨別出來後再判斷 target 在哪一邊並更新即可。
Python3:
``` python 3
class Solution:
def search(self, nums: list[int], target: int) -> int:
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
if nums[mid] >= nums[left]:
if nums[mid] > target and nums[left] <= target:
right = mid - 1
else:
left = mid + 1
else:
if nums[mid] < target and nums[right] >= target:
left = mid + 1
else:
right = mid - 1
return -1
if __name__ == '__main__':
# nums = [4, 5, 6, 7, 0, 1, 2]
# target = 0
nums = [3,1]
target = 1
ans = Solution().search(nums, target)
print(ans)
```
C:
``` c
#include <stdio.h>
#include <stdlib.h>
int search(int* nums, int numsSize, int target) {
int left = 0, right = numsSize - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target)
return mid;
if (nums[mid] >= nums[left]) {
if (nums[mid] > target && nums[left] <= target)
right = mid - 1;
else
left = mid + 1;
} else {
if (nums[mid] < target && nums[right] >= target)
left = mid + 1;
else
right = mid - 1;
}
}
return -1;
}
int main()
{
int nums[] = {3, 1};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int target = 1;
int ans = search(nums, numsSize, target);
printf("%d\n", ans);
return 0;
}
```
###### tags: `leetcode` `binary search`