leecode第三十三題(搜索旋轉排序數組)
阿新 • • 發佈:2019-03-24
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第三十三題(搜索旋轉排序數組)