leetcode原题:搜索旋转排序数组 II (81)

下面展示一些 内联代码片
执行用时:4 ms, 在所有 C++ 提交中击败了94.19%的用户
内存消耗:13.7 MB, 在所有 C++ 提交中击败了15.27%的用户

总的来说这道题的代码还是略显复杂。 首先去重,然后再在过程之中中间值判断时进行优化。

// C++ 代码
bool search(vector<int>& nums, int target) {
	if(nums.size()==0)
		return -1;
	int left=0, right = nums.size()-1, mid;
	//旋转的点可能在左边也可能在右边.首先去重
	while(left < right && nums[left] == nums[right]){
		left ++;
	}
	while(left < right){
		mid= left + (right - left)/2;
		if(nums[mid] == target || mid+1 <= right && nums[mid+1] == target){
			return true;
		}
		if(nums[left] <= nums[mid] && target < nums[mid] && target >= nums[left]
				|| nums[mid] <= nums[right] && (target < nums[mid] || target > nums[right])){//右边有序,但是在左边
			right = mid -1;
		}else{
			left = mid + 1;
		}
	}
	if(target == nums[left]){
		 return true;
	}
	return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值