#include
#include
#include
using
namespace std;
bool
binaryfind
(vector<
int>
& nums,
int begin,
int end,
int target)
else
if(nums[mid]
> target)
else
}return
false;}
intmain()
; vector<
int> nums =
; cout <<
binaryfind
(nums,
0, nums.
size()
-1,8
)<< endl;
return0;
}
分析:如果target存在,mid就一定能夠指向它;如果target不存在,則begin會指向target應該出現的位置。
另一種寫法,參考博文講得挺好挺清楚,如下:
#include
#include
#include
using
namespace std;
bool
binaryfind
(vector<
int>
& nums,
int begin,
int end,
int target)
int mid;
++end;
while
(begin < end)
else
}
cout << begin << endl;
return
false;}
intmain()
;//vectornums = ;
binaryfind
(nums,
0, nums.
size()
-1,33
);return0;
}
分析:如果target存在,begin就一定能夠指向它;如果存在多個重複target,begin就指向第乙個target(與下面的search_first函式功能一樣);如果target不存在,則begin會指向target應該出現的位置。
#include
#include
#include
using
namespace std;
intsearch_first
(vector<
int>
& nums,
int target)
int left =0;
int right = nums.
size()
-1;int mid;
while
(left <= right)
else}if
(left < nums.
size()
&& nums[left]
== target)
return left;
}int
main()
; vector<
int> nums =
; cout <<
search_first
(nums,0)
<< endl;
return0;
}
分析:如果存在多個target,則left指向第乙個的位置;如果不存在target,則left指向它應該出現的位置。
#include
#include
#include
using
namespace std;
intsearch_last
(vector<
int>
& nums,
int target)
int left =0;
int right = nums.
size()
-1;int mid;
while
(left <= right)
else}if
(right >=
0&& nums[right]
== target)
return left;
}int
main()
; vector<
int> nums =
; cout <<
search_last
(nums,-1
)<< endl;
return0;
}
分析:如果存在多個target,則rigth指向最後乙個的位置;如果不存在target,則left指向它應該出現的位置(沒錯,與上乙個演算法一樣,都是left指向它應該出現的位置)。
【leetcode】34. find first and last position of element in sorted array
感覺discuss的演算法更好理解一些,「find first position」和「find last position」互為映象。**如下:
// part 1和part 2是映象**
class
solution
;int i =
0, j = a.
size()
-1; vector<
int>
ret(2,
-1);
// part 1
while
(i < j)
else}if
(a[i]
!= target)
else
// part 2
j = a.
size()
-1;while
(i < j)
else
}
ret[1]
= j;
return ret;}}
;
參考:
【leetcode】34. find first and last position of element in sorted array的discuss
搜尋演算法之二分法
二分法是搜尋演算法中的最簡單演算法,其另一種稱呼為折半查詢法,實際上核心思想就是對乙個有序陣列,進行從中間分隔,然後去中間值來進行查詢,如果對應所要找的數值比中間的值大,則說明搜尋的數值在陣列的右側,如果小則說明在左側,二分查詢最重要的前提是所要搜尋的陣列資料一定要是有序的,如果是無序的話,則這個方...
二分法,二分搜尋
二分法是乙個應用很廣泛的演算法 好吧,剛說出這句話的時候,我查了一下資料,發現我了解的應用寥寥無幾.ok,既然不知道,那就下次補充把。咱們直接進入主題。二分法 bisection method 是一種方程式根的近似值求法。演算法 若要求已知函式f x 0的值則 1.先找出乙個區間 a,b 使得f a...
搜尋 二分法
input 待搜尋目標整數,目標陣列 output 找到目標整數的索引,找不到則 1 constraints 目標陣列有序排列 公升降序 二分法搜尋思想 舉例說明 你是個摸牌高手,不用掀開麻將只需用手摸就能摸出牌面,桌面扣著80個麻將牌,不同的是麻將上刻的是80個1到500的公升序不連續數字,形如 ...