Search in Rotated Sorted Array II

来源:互联网 发布:顾比均线源码带买卖点 编辑:程序博客网 时间:2024/04/30 07:32

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.

思路:binary search。主要是判断哪个区间是有序的,然后判断target在不在其中,不在就搜索另外一半。如果有重复的话,也就是nums[start] == nums[mid] == nums[end]这种情况需要搜索两边的区间了,一边如果没有,则搜另外一边。这样子的话,用recursion写比较方便。刚尝试用while,不怎么好写这种情况。

public class Solution {    public boolean search(int[] nums, int target) {        if(nums == null || nums.length == 0) return false;        return find(nums, target, 0, nums.length-1) != -1;    }        public int find(int[] nums, int target, int start, int end) {        if(start>end) return -1;        int mid = start+(end-start)/2;        if(nums[mid] == target){            return mid;        }        if(nums[mid] > nums[end]) { // left side is sorted;            if(nums[start]<=target && target < nums[mid]) {                return find(nums, target, start, mid-1);            } else {                return find(nums, target, mid+1, end);            }        } else if(nums[mid] < nums[end]) { // right side is sorted;            if(nums[mid] < target && target <= nums[end]){                return find(nums, target, mid+1, end);            } else {                return find(nums, target, start, mid-1);            }        } else { // nums[mid] == nums[end];            int index = find(nums, target, start, mid-1);            if( index == -1){                return find(nums, target, mid+1, end);            } else {                return index;            }        }    }}


0 0
原创粉丝点击