LeetCode Search in Rotated Sorted Array II

本文探讨了在含有重复元素的旋转一次的有序数组中搜索目标值的方法,通过寻找断点定位数组左右递增部分,进而采用二分搜索策略优化查找过程。详细介绍了算法实现及时间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Write a function to determine if a given target is in the array.

旋转一次的有序数组含有重复的元素

遍历数组找到旋转的位置,左边、右边都是递增的

如果target在左边,在左侧二分搜索

否则在右侧二分搜索

public class Solution {
    public boolean search(int[] A, int target) {
        int middle = 0;
		int start = 0;
		int end = A.length;
		if(end==0)
		    return false;
		int i;
		for(i=1;i<end;i++){   //找到断点
			if(A[i]<A[i-1])
				break;
		}
		if(target>=A[0]&&target<=A[i-1]){
			start=0;
			end=i;
		}
		else
		{
			start=i;
			end=A.length;
		}
		while (true) {
			middle = (start + end) / 2;
			if (start >= end)
				return false;
			if (A[middle] == target)
				return true;
			if(A[middle] < target)
				start=middle+1;
			else
				end=middle;
		}
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值