现在的位置: 首页 > 综合 > 正文

leetcode – Search in Rotated Sorted Array II

2019年04月15日 ⁄ 综合 ⁄ 共 670字 ⁄ 字号 评论关闭

有duplicate的确会有影响,最坏情况下复杂度为O(n)。

产生影响的例子

(1)5,5,5,5,9,5

(2)5,9,5,5,5,5

这种情况下没有办法知道该如何二分。只能简单枚举了,两种枚举办法:

(1)枚举最左端(l++) 或者最右端(r--)

(2)我这里的策略比较暴力,当没法二分时候,我直接从左到右遍历一边,看看target在不在。

public class Solution {

	public boolean search(int[] A, int target) {

		int l, r, m;
		l = 0;
		r = A.length - 1;

		while (l <= r) {

			m = (l + r) >> 1;

			if (A[m] == target)
				return true;
			
			
			else if(A[l] < A[m]){
				if(target >= A[l] && target < A[m])
					r = m - 1;
				else
					l = m + 1;
			}
			
			else if(A[l] > A[m])
			{
				if(target > A[m] && target <= A[r])
					l = m + 1;
				else
					r = m - 1;
			}
			
			else if(A[m] == A[l] && A[m] != A[r])
			{
				l = m + 1;
			}
			
			else
			{
				for(int i = l;i<=r;i++)
					if(A[i] == target)
						return true;
				return false;
			}

		}

		return false;
	}
	
	public static void main(String[] args){
		Solution sol = new Solution();
		int[] A = new int[]{1,1,3,1};
		System.out.println(sol.search(A, 3));
	}

}

抱歉!评论已关闭.