呃 其實是昨天追太陽的后裔和銀魂搞得第二天的內容沒寫完。
最近好虐 國足出線 銀魂本季完結 心塞...
不過每天洗完澡照照鏡子 又會發覺世界是多么美好
1.png
言歸正傳
2.4 算法和數據操作
重點掌握 二分查找 歸并排序 快速排序
tips 如果題目要求在排序的數組(或部分排序的數組)中查找一個數字或統計某個數字出現的次數,我們都可以嘗試二分查找算法。
哈希表最主要的優點是能夠在O(1)時間查找某一元素。
快速排序 主要思想 在數組中選擇一個數字,把數組中小于該數字的移到數組左邊,大的移到右邊。
快排代碼
void qucikSort(int left,int right,int a[]){
int i,j,t,temp;
if (left>right) {
return;
}
temp=a[left];
i=left;
j=right;
while (i!=j) {
while (a[j]>=temp && i<j) {
j--;
}
while (a[i]<=temp && i<j) {
i++;
}
if (i<j) {
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
a[left]=a[i];
a[i]=temp;
qucikSort(left, i-1,a);
qucikSort(i+1, right,a);
}
如果需要排序的數字在一個較小的范圍內,可以考慮桶排。
2.4.2 遞歸和循環
如果我們需要重復計算相同的問題,可以選擇遞歸或者循環兩種不同的方法。
斐波那契數列 又想起組合數學了 讓我哭一會
代碼
int Fib(int x){
if (x<=0) {
return 0;
}
if (x==1 || x==2) {
return 1;
}
return Fib(x-1)+Fib(x-2);
}
非遞歸
//真為自己的單詞量感到捉急
int FibNotDigui(int x){
if(x==0) return 0;
if(x==1) return 0;
int FibOne=1;
int FibTwo=0;
int Fib=0;
//f(n)=f(n-1)+f(n-2) FibOne:f(n-1) FibTwo:f(n-2)
for (int i=2; i<=x; i++) {
Fib=FibOne+FibTwo;
FibTwo=FibOne;
FibOne=Fib;
}
return Fib;
}
相關變形 一只蛤一次可以跳上一級,也可以跳上兩級,求跳n級臺階共有多少種跳法。
n級臺階只有從n-1級和n-2級跳上兩種方法,設f(n)為n級臺階的跳法
f(n)=f(n-1)+f(n-2)
識得唔識得 還是一個斐波那契問題 !
位運算
輸入一個整數,輸出該數二進制中1的個數,如9 1001 輸出2
思路 把n和1做運算 得出最低位是否為1 再把1左移一位 和n做與運算 得出次地位是否為1 依此類推
代碼如下
void numberofOne(int x){
int count=0;
unsigned int test=1;
if (x==1) {
printf("%d",1);
return;
}
while (test<x) {
if (x & test) {
count++;
}
test= test << 1;
}
printf("%d",count);
}
先寫那么多 今天看的還得整理下
ps:希望保安別那么早趕人 讓我把劇看完
pps:今天絕對不能吃宵夜了!