2.1.4 Search in Rotated Sorted Array II

来源:互联网 发布:徐州华道数据公司图片 编辑:程序博客网 时间:2024/04/29 03:56

Link: https://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/

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.

Time: O(n) //because of linear search due to duplicates. Space: O(1)

public class Solution {    public boolean search(int[] A, int target) {        int l = 0;        int r = A.length - 1;        while(l <= r){            int m = (l+r)/2;            if(A[m] == target) return true;            else if(A[m] > A[l]){                 //should add to A[l] <= target, not target < A[m] because if target == A[m], we should not decrease high                if(A[l] <= target && target < A[m]){                    r = m - 1;                }                else{                    l = m + 1;                }            }            else if (A[m] < A[l]){                if(A[m] < target && target <=A[r]){                    l = m + 1;                }                else{                    r = m - 1;                }            }            else{//A[m] == A[l]                l++;            }        }        return false;    }}

Note: 11.3.2014

一遍没过。记得判断A[m] 和A[l]的大小。

while(l<=r), not l < r. e.g. When A = {1}, target = 1, if while(l <r) then we will return false. 

0 0
原创粉丝点击