Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Write a function to determine if a given target is in the array.
The array may contain duplicates.
1 public class Solution { 2 public bool Search(int[] nums, int target) { 3 return BinarySearch(nums, target, 0, nums.Length - 1); 4 } 5 6 private bool BinarySearch(int[] nums, int target, int start, int end) 7 { 8 if (start > end) return false; 9 10 if (start == end) return nums[start] == target; 11 12 if (nums[start] == target || nums[end] == target) return true; 13 14 int mid = start + (end - start) / 2; 15 16 if (nums[mid] == target) return true; 17 18 if (nums[start] < nums[mid]) 19 { 20 if (target > nums[start] && target < nums[mid]) 21 { 22 return BinarySearch(nums, target, start + 1, mid - 1); 23 } 24 else 25 { 26 return BinarySearch(nums, target, mid + 1, end - 1); 27 } 28 } 29 else if (nums[start] == nums[mid]) 30 { 31 return BinarySearch(nums, target, start + 1, mid - 1) || BinarySearch(nums, target, mid + 1, end - 1); 32 } 33 else if (nums[end] == nums[mid]) 34 { 35 return BinarySearch(nums, target, start + 1, mid - 1) || BinarySearch(nums, target, mid + 1, end - 1); 36 } 37 else 38 { 39 if (target > nums[mid] && target < nums[end]) 40 { 41 return BinarySearch(nums, target, mid + 1, end - 1); 42 } 43 else 44 { 45 return BinarySearch(nums, target, start + 1, mid - 1); 46 } 47 } 48 49 return false; 50 } 51 }