標籤:leetcode
Search in Rotated Sorted Array前言:
這道題你在網上搜,大多數都是錯的。
下面這樣:
使用while(first!=last)這樣迴圈,
最後返回-1.
這樣做 first==last時,就會跳出迴圈,從而出錯。
正確的做法應該是 do{}while(first!=last).
思路:
數組是這樣的: 大——小—–中
邊界分為四種情況:
left<mid: key是否在(left,mid)中, 如果在, right = mid-1; 如果不在, left = mid+1; left>mid: key是否在(mid,right)中, 如果在, left = mid+1; 如果不在, right = mid-1;
效率:
時間複雜度 O(log n),空間複雜度 O(1)
C代碼
#include <iostream>using namespace std;int search(int* nums, int numsSize, int target) { int left = 0; int right = numsSize-1; do{ int mid = (left+right)/2; if(nums[mid]==target) return mid; if(nums[left]<=nums[mid]){ if(nums[left]<=target && target<nums[mid]){ right = mid-1; }else{ left = mid+1; } } else { if(nums[mid]<target && target<=nums[right]){ left = mid+1; }else{ right = mid-1; } } }while(left<=right); return -1;}int main(int argc, char *argv[]) { int arr[] = {3,1,2}; int result = search(arr,3,2); printf("%d", result); return 0;}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
LeetCode--Search in Rotated Sorted Array