Leecode刷題
- 題目描述
假設按照升序排序的數組在預先未知的某個點上進行了旋轉。
( 例如,數組 [0,1,2,4,5,6,7] 可能變爲 [4,5,6,7,0,1,2] )。
搜索一個給定的目標值,如果數組中存在這個目標值,則返回它的索引,否則返回 -1 。
你可以假設數組中不存在重複的元素。
你的算法時間複雜度必須是 O(log n) 級別。
- 示例
輸入: nums = [4,5,6,7,0,1,2], target = 0
輸出: 4
輸入: nums = [4,5,6,7,0,1,2], target = 3
輸出: -1
- 代碼
class Solution {
public:
int search(vector<int>& nums, int target)
{
if(nums.size() == 0)
return -1;
if(nums.size() == 1 && nums[0]!=target)
return -1;
else
{
int n = nums.size() - 1;
if(target == nums[0])
{
return 0;
}
else
if(target > nums[0])
{
int j = 1;
while(target > nums[j] && j < n)
{
j++;
}
if(target == nums[j])
return j;
else
return -1;
}
else
{
int j = n;
while(target < nums[j] && j > 0)
{
j--;
}
if(target == nums[j])
return j;
else
return -1;
}
}
}
};