不會出現越界,只有在left==right
時,跳出迴圈,因此需要對left判斷適應邊界情況
int
binary_search
(const
int*array,
int num,
int target)
else
if(array[mid]
> target)
else
if(array[mid]
== target)}if
(array[left]
== target)
return left;
return-1
;}
不想要判斷邊界,則更改迴圈條件為left <= right
略
對於有序數列 1 2 3 3 3 3 4 5 6,查詢目標第一次出現的位置,即左邊界問題。
不會出現越界,只有在left==right
時,跳出迴圈
int
left_bound
(const
int*array,
int num,
int target)
else
if(array[mid]
> target)
else
if(array[mid]
== target)
}// 最後要檢查 left 越界的情況
if(left >= num || array[left]
!= target)
return-1
;return left;
}
把乙個陣列最開始的若干個元素搬到陣列的末尾,稱之為陣列的旋轉。要求:輸入乙個非遞減排序的陣列的乙個旋轉,輸出其最小元素。如:陣列為的乙個旋轉,該陣列的最小值為1。
迭代式:
class
solution
return a[l];}
};
遞迴式:
class
solution
intfind
(vector<
int>
& a,
int l,
int r)
};
Leetcode刷題筆記 查詢
給定乙個被翻轉的整型公升序陣列nums,陣列中無重複元素,如 4,5,6,7,0,1,2 和乙個整數target。要求在被翻轉過的陣列中找到target的位置,若不存在,則返回 1。並且演算法的時間複雜度要求為o log n 如果是有序陣列,則使用二分查詢就可以將複雜度控制在o log n 了。所以...
演算法筆記 刷題2 5
b 習題6 5 陣列元素逆置 c 習題6 6 楊輝三角 d 習題6 12 解密 e 習題6 13 字串比較 f 例題6 1 逆序輸出陣列元素 b 習題6 5 陣列元素逆置 g 例題6 2 陣列求解fibonacci數列問題 h 例題6 3 氣泡排序 i 例題6 4 矩陣轉置 j 例題6 9 字串求最...
演算法筆記 刷題2 6
b 習題7 7 複製字串中的母音字母 寫乙個函式將乙個字串按反序存放。在主函式中輸入乙個字串,通過呼叫該函式,得到該字串按反序存放後的字串,並輸出。一行字串。輸入字串反序存放後的字串。單獨佔一行。abcddcbastrlen s1 計算s1字串內的字元數 包括 0 include include i...