二分法
將陣列一分為二,則一定有 一部分是有序的,一部分是無序的 4 5 6 7 0 1 2如果
nums[r] > nums[mid]
則右邊一定有序 0 1 2(7_mid 0 1 2_r)
如果nums[l] < nums[mid]
則左邊一定有序 4 5 6 74_l 5 6 7 0_mid
思路:如果中間的數小於最右邊的數,則右半段是有序的,若中間數大於最右邊數,則左半段是有序的,我們只要在有序的半段裡用首尾兩個陣列來判斷目標值是否在這一區域內,這樣就可以確定保留哪半邊了
class solution
else
}int
search
(vector<
int>
& nums,
int target)};
// 非遞迴 寫法
intsearch
(vector<
int>
& nums,
int target)
else
r = mid-1;
}else
}return-1
;}
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列[3,4,5,1,2]
為[1,2,3,4,5]
的乙個旋轉,該陣列的最小值為1。
class solution
// return numbers[0];
int l=
0,r=numbers.
size()
-1;while
(lreturn numbers[l];}
};
33 搜尋旋轉排序陣列
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...
33 搜尋旋轉排序陣列
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是o log n 級別。輸入 ...
33 搜尋旋轉排序陣列
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...