每日演算法之5

2021-08-31 00:24:32 字數 1555 閱讀 1201

//二分查詢:針對於有序序列

int b_search(int a,int length,int e)

return -1;

} //遞迴改編:

int b_search(int a,int low,int high,int e)else

return -1;

}//測試用例

int main();

int e=6;

coutthrow "age error!";

++countage[age];

}//將桶中的年齡次數資料重新還原存入ages陣列中

int j=0;//表示ages的下標

for(int countageindex=0;countageindexrotate[mid-1])

low=mid+1;

else

return rotate[mid];

}return rotate[0];//如果沒有找到,說明旋轉陣列旋轉了0個數,最小值即為第乙個數

}//測試用例:

int main();

cout<<"最小值為:"<=re[high])

mid=(low+high)/2;

//直接使用順序查詢

if(re[low]==re[high]&&re[low]==re[mid])

return findmin_order(re,low,high);

//否則使用二分查詢

if(re[mid]>=re[low])

low=mid;

else if(re[mid]<=re[high])

high=mid;

}return re[mid];

}int findmin_order(int re,int low,int high)

return res;

}//思考總結:二分查詢的核心邏輯三大要點

/* 1.什麼樣的區間才會含有所求值,而什麼樣的區間不會含有所求值

2.縮小區間到什麼時候就能找到所求值

3.滿足什麼條件退出查詢

4.其他的特殊情況!!必須做特殊的處理

*/

//問題分析:如果n=10000,顯然即使unsigned long long有心而長度不足,這個使用必須使用字元陣列+

//進製的原理進行解決,即每次按照位數,每次乘以2時逢十進一

void calulator(int n)

result[bit]=temp+'0';//轉換為字元

}if(flag>0)

}if(resnum>max)

throw "max error!";

for(int i=resnum-1;i>=0;--i)catch(const char *e)

}}//輸入33333

//輸出:max error!

//表示最大能夠計算33333次方!!

//演算法時間複雜度分析:假設每乘以4次進一位,則乘以n次,基本運算元為n^2/16+3n+8,

//即時間複雜度為o(n^2)

每日演算法之七 Reverse Integer

reverse digits of an integer.example1 x 123,return 321 example2 x 123,return 321 反轉整形數字,使用取餘取整迴圈即可,但是實際要考察的應該是對可能輸入的考慮是否全面 1 是否為零 2 如果是1200,翻轉後是0021還是...

每日演算法之十九 Valid Parentheses

這個就是檢視括號是否是匹配的。使用stl中的stack是容易實現的。如下 given a string containing just the characters and determine if the input string is valid.the brackets must close ...

每日練習 5

c c 1 clone是fork的公升級版本,不僅可以建立程序或者執行緒,還可以指定建立新的命名空間 namespace 有選擇的繼承父程序的記憶體 甚至可以將建立出來的程序變成父程序的兄弟程序等等 2 引用和多型的關係 引用可以作為產生多型效果的手段 3 include void f char p...