1. 程式人生 > >leecode第三十三題(搜索旋轉排序數組)

leecode第三十三題(搜索旋轉排序數組)

amp 都是 spa 循環 會有 .com search bsp 處理

技術分享圖片

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int len=nums.size();
        
        if(len==0)//兩種輸入的特殊情況
            return -1;
        if (len==1)
            return (target==nums[0])? 0:-1;
        
        int start=0,end=len-1;
        while
(start<=end) { int mid=(end-start)/2+start; if(nums[mid]==target)//兩種循環中的特殊情況 return mid; if(start==end) return -1; else if(nums[end]>nums[start])//如果是沒有旋轉的情況,比較好說 { if(nums[mid]>target) end
=mid; else if(nums[mid]<target) start=mid+1; } else if(nums[end]<nums[start])//如果是旋轉的情況 { if(nums[mid]>=nums[start] && (nums[mid]<target || target<nums[start]))//如果中間值往左都是升序的,判斷這個裏面有沒有值 start=mid+1
; else if(nums[mid]>=nums[start])//不存在就舍棄這段,不然就保留,但是要記得這裏>=,因為二者有可能重疊,且上面不會有百分之百處理這個情況的 end=mid; if(nums[mid]<nums[end] && (nums[mid]>target || target>nums[end]))//如果中間值往右都是升序的,判斷這個裏面有沒有值 end=mid; else if(nums[mid]<nums[end])//這裏不用加=,因為如果相等說明start=end,上面就return了 start=mid; } } return -1; } };

分析:

一開始我沒有想到全部的案例,在有限的案例下想到一個一般但不足以解決全部案例的想法,後來提交有錯時不停加條件,發現越來越亂,於是重新想了個思路。

可是太惡心了啊,好難想到全部的案例!!

尤其是這種數組題。

饒命啊。

leecode第三十三題(搜索旋轉排序數組)