1. 程式人生 > >33.Search in Rotated Sorted Array---二分變形

33.Search in Rotated Sorted Array---二分變形

ted display LG public splay nbsp opened IV return

題目鏈接

題目大意:在一個旋轉數組中,判斷給定的target是否存在於該旋轉數組中。

法一:二分。確定中間元素之後,就要判斷下一步是遍歷左數組還是遍歷右數組。如果左數組有序,且target在左數組範圍內,則遍歷左數組,否則遍歷右數組;如果右數組有序,且target在右數組範圍內,則遍歷右數組,否則遍歷左數組。o(lgn)。代碼如下(耗時15ms):

技術分享圖片
 1     public int search(int[] nums, int target) {
 2         int left = 0, right = nums.length - 1;
 3         while(left <= right) {
4 int mid = (left + right) / 2; 5 if(nums[mid] == target) { 6 return mid; 7 } 8 //如果左半段有序 9 else if(nums[left] <= nums[mid]) { 10 //如果target在左半段範圍內 11 if(nums[left] <= target && nums[mid] > target) {
12 right = mid - 1; 13 } 14 //雖然左半段有序,如果target不在左半段範圍內,則向右遍歷右半段 15 else { 16 left = mid + 1; 17 } 18 } 19 //如果右半段有序 20 else { 21 //如果target在右半段範圍內 22 if
(nums[right] >= target && nums[mid] < target) { 23 left = mid + 1; 24 } 25 //雖然右半段有序,如果target不在右半段範圍內,則向左遍歷左半段 26 else { 27 right = mid - 1; 28 } 29 } 30 } 31 return -1; 32 }
View Code

33.Search in Rotated Sorted Array---二分變形