記錄一下,方便複習
leetcode 33
leetcode 81/*
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。
搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。
你可以假設陣列中不存在重複的元素。
你的演算法時間複雜度必須是 o(log n) 級別。
示例 1:
輸入: nums = [4,5,6,7,0,1,2], target = 0
輸出: 4
示例 2:
輸入: nums = [4,5,6,7,0,1,2], target = 3
輸出: -1
*//*
要求複雜度o(log n) 可以想到二分法
主要利用分成兩組之後 肯定一邊有序一邊沒有序
*/#include
#include
using
namespace std;
class
solution
if(n ==1)
else
}int left =
0, right = n -1;
while
(left <= right)
if(nums[mid]
>= nums[left]
)else
}else
else}}
return-1
;}};
和上一題差不多 只不過允許陣列中的元素重複,所以比較的時候如果nums[left] == nums[mid] 讓left++ 相當於把這個去掉了
leetcode 153/*
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,0,1,2,2,5,6] 可能變為 [2,5,6,0,0,1,2] )。
編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。
*//*
可能nums[left]==nums[mid] 所以這時候把left++ 然後在迴圈繼續比較
*/#include
#include
using
namespace std;
class
solution
if(n ==1)
else
}int left =
0, right = n -1;
while
(left <= right)
if(nums[mid]
== nums[left])if
(nums[mid]
> nums[left]
)else
}else
else}}
return
false;}
};
leetcode 154 相比153允許了重複元素/*
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。
請找出其中最小的元素。
你可以假設陣列中不存在重複元素。
*//*
考慮到最小值兩邊肯定都比他大,所以直接遍歷就行
也可以用二分法
*/#include
#include
using
namespace std;
class
solution
if(n ==2)
else
}for
(int i =
1; i < n -
1; i++)}
if(nums[0]
< nums[n -1]
)else}}
;
/*
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。
請找出其中最小的元素。
注意陣列中可能存在重複的元素。
示例 1:
輸入: [1,3,5]
輸出: 1
示例 2:
輸入: [2,2,2,0,1]
輸出: 0
*/#include
#include
using
namespace std;
class
solution
if(n ==2)
else
}//二分法做
int left =
0, right = n -1;
if(nums[right]
> nums[left]
)while
(right >= left)
//如果nums[mid]>nums[tmp] 那就證明tmp這個是轉變那個點
if(nums[mid]
> nums[tmp]
)while
(tmp_l > left && nums[mid]
== nums[tmp_l]
)//證明nums[mid]是轉變那個點
if(nums[mid]
< nums[tmp_l]
)//說明全相等
if(nums[mid]
== nums[tmp]
&& nums[mid]
== nums[tmp_l]
)//這裡是要說明左邊是公升序 可能會有10 1 10 10 10這種情況
if(nums[mid]
>= nums[0]
&&nums[tmp_l]
>=nums[0]
)else
}return-1
;}};
//題解
//根據這樣的乙個性質: 我們考慮陣列中的最後乙個元素 xx:
//在最小值右側的元素,它們的值一定都小於等於 xx;
//而在最小值左側的元素,它們的值一定都大於等於 xx。
//因此,我們可以根據這一條性質,通過二分查詢的方法找出最小值
//153題也同樣適用
class
solution
else
if(nums[pivot]
> nums[high]
)else
}return nums[low];}
};
LeetCode刷題之路 二分法
分享巧克力 你有一大塊巧克力,它由一些甜度不完全相同的小塊組成。我們用陣列 sweetness 來表示每一小塊的甜度。你打算和 k 名朋友一起分享這塊巧克力,所以你需要將切割 k 次才能得到 k 1 塊,每一塊都由一些 連續 的小塊組成。為了表現出你的慷慨,你將會吃掉 總甜度最小 的一塊,並將其餘幾...
C 二分法查詢,遞迴二分法
用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...
python二分法查詢 Python 二分法查詢
二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...