1、給定乙個整數n,那麼n的階乘n!末尾有多少個0呢?例如:n=10,n!=3 628 800,n!的末尾有兩個0。
int zeronumber(int num)
return ret;
}int main()
return count;
}
3、
查詢乙個字串中第乙個只出現兩次的字元。比如:「abcdefabcdefabc」中第乙個只出現兩次為『d』,要求時間複雜度為o(n),空間複雜度為o(1)。
char fistnotrepeat(char *string)
return '\0';
}
4、乙個陣列中有乙個數字的次數超過了陣列的一半,求出這個字元。
#includeusing namespace std;
int numgreaterthanhalf(int* numbers,int length)
else if (result == numbers[idx])
times++;
else
times--;
} times = 0;
//計算次數最多的元素的個數是多少
for (int index = 0; index < length; ++index)
//判斷該元素的次數是否超過陣列的一半
if (times * 2 <= length)
result = 0;
return result;
}int main()
; int len = sizeof(array) / sizeof(array[0]);
int key = numgreaterthanhalf(array, len);
if (key != 0)
cout << "出現一半的數字是:" << key << endl;
else
cout << "沒有超過陣列一半的元素!" << endl;
system("pause");
return 0;
}
6、實現乙個add函式,讓兩個數相加,但是不能使用+、-、*、/等四則運算符;也不能用++、--等等。
int add(int a, int b)//求兩個數的和,不用+-*/
7、乙個m*n的矩陣,從左到右從上到下都是遞增的,給乙個數x,判斷x是否在矩陣中。要求效率盡可能的高。
bool find(int *array, int rows, int columns, int number)
return false;
}
8、已知集合a和b的元素分別用不含頭結點的單鏈表儲存,函式difference()用於求解集合a與b的差集,並將結果儲存在集合a的單鏈表中。
void difference(listnode** phead1, listnode* phead2)
else
}}
資料結構之小演算法(快慢指標原理)
如何找到未知長度單鏈表的中間節點?思路1 遍歷單鏈表獲取長度n,n 2再遍歷得到中間節點,時間複雜度為o n n 2 o 3 2n 思路2 利用快慢指標原理,設定兩個指標 search,mid,都指向單鏈表第乙個元素,假設單鏈表有頭結點,則為 search mid l next,其中 search的...
資料結構之演算法
資料結構 演算法 程式 資料結構是對資料 操作物件 的描述,及資料的型別和組織形式,演算法則是對操作步驟的描述 1.有窮性 演算法中的每個步驟都能在有限時間內完成 程式可不滿足此條件 2.確定性 演算法的每一步必須確切定義,在任何條件下演算法只有一條執行路徑 3.可行性 演算法中的所有操作必需通過已...
資料結構之演算法
演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。演算法是需要單獨講解的,在資料結構中談到演算法,是為了幫助理解好資料結構,並不會詳談演算法的方方面面。1 2 3 100 演算法1 include int main void printf d sum...