本文共 1277 字,大约阅读时间需要 4 分钟。
核心思想:
1,首先判断是否为截断数组,因为区间划分上有很大不同。 2,判断mid元素是否贡献价值,比如严格大于L,或严格小于R 3,以上条件都不满足,则抛给下一层递归。/* * @lc app=leetcode id=81 lang=cpp * * [81] Search in Rotated Sorted Array II */// @lc code=startclass Solution { public: bool search(vector & nums, int target) { int N = nums.size(); if(N == 0) return false; return bisearch(nums,0,N,target); } bool bisearch(vector & nums, int L, int R, int target){ if(L+1 >= R){ if(nums[L] == target) return true; return false; } int mid = (L+R)/2; if(nums[mid] == target) return true; // 单调 if(nums[L] < nums[R-1]){ if(nums[mid] <= target) return bisearch(nums,mid,R,target); return bisearch(nums,L,mid,target); } // 有截断 if(nums[mid] > nums[L]){ if(target >= nums[mid] || target <= nums[R-1]) return bisearch(nums,mid,R,target); return bisearch(nums,L,mid,target); } if(nums[mid] < nums[R-1]){ if(target < nums[mid] || target >= nums[L]) return bisearch(nums,L,mid,target); return bisearch(nums,mid,R,target); } return bisearch(nums,L,mid,target) || bisearch(nums,mid,R,target); }};// @lc code=end
转载地址:http://oagci.baihongyu.com/