LeetCode刷题-搜索旋转排序数组 II

搜索旋转排序数组 II

题目

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。

编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。

样例

  1. 输入: nums = [2,5,6,0,0,1,2], target = 0
    输出: true
  2. 输入: nums = [2,5,6,0,0,1,2], target = 3
    输出: false

Code

分析
允许重复元素,则如果A[m]>=A[l],那么推知[l, m]为递增序列。
如果A[m]>=A[l]不能确定递增,则拆分成两个条件:
若A[m]>A[l],则区间[l, m]一定为递增序列;
若A[m]=A[l],则i++,往下看一步。

时间复杂度O(n),空间复杂度O(1)

bool search(const vector& nums,int target) {
	int first=0,last=nums.size();
	while(first!=last) {
		const int mid=first+(last-first)/2;
		if(nums[mid==target]) {
			return true;
		}
		if(nums[first]nums[mid]) {
			if(nums[mid]

若有疑问欢迎评论!

你可能感兴趣的:(LeetCode)