搜索旋轉排序數組

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;
            }
        }
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章