notes:
1.迴圈的時候left<=right ,這樣若能找到的話,就一定會判斷到 nums[mid]==value;
2.mid = left+((right-left)>>1);為了防止兩個數的和會溢位
#include#includeusing namespace std;
int binsearch(vectornums,int value)
if(nums[mid]temp;
int a;
for(int i=0;i<8;i++)
int x;
cin>>x;
int res=binsearch(temp,x);
cout<題目:
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列[3,4,5,1,2]為[1,2,3,4,5]的乙個旋轉,該陣列的最小值為1。
示例 1:
輸入:[3,4,5,1,2]
輸出:1
示例 2:
輸入:[2,2,2,0,1]
輸出:0
主要想法:
可以看成前後兩個非遞減陣列,想要找的值是第二個陣列裡的第乙個值。而且第乙個陣列裡的任意數都要比第二個陣列裡的大或等。
判斷numbers[mid] 和numbers[j]的關係:
if(numbers[mid]>numbers[j]) i=mid+1;說明現在mid在第乙個陣列裡,需要將i=mid+1,捨棄掉前面的那些元素
if(numbers[mid]==numbers[j]) j=j-1;說明現在的範圍中有兩個數是一樣的,所以可以捨掉乙個
if(numbers[mid]最後的最後,一定會i=j的hhh
ps:比書上給的方法清晰多了鴨~,再也不用分類討論特殊情況了(1,2,3,4,5或1 1 1 1 1 1 1)
class solution
else if(numbers[mid]else
}return numbers[i];
}};
樹 二叉樹及二叉查詢樹
n n 0 個結點的有限集。如果 n 0,稱為空樹 如果 n 0,則 1 有且僅有乙個特定的稱為根 root 的結點,根只有直接後繼,沒有直接前驅 2 當n 1,除根外其它結點劃分為 m m 0 個互不相交的有限集t1,t2 tm,其中每個集合本身又是一棵樹,稱為根的子樹 subtree 樹的結點 ...
二叉查詢樹 C
include stdafx.h include using namespace std 二叉查詢樹的性質 1.二叉排序樹或為空樹 2.若左子樹不為空,則左子樹中所有節點的值均小於或等於根節點 3.若右子樹不為空,則右子樹中所有節點的值均大於或等於跟節點 4.左右子樹也為二叉排序樹 5.二叉排序樹採...
C 二叉查詢樹
二叉排序樹 binary sort tree 又稱二叉查詢樹 binary search tree 亦稱二叉搜尋樹。二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點...