資料結構之小演算法

2021-08-04 04:21:54 字數 1554 閱讀 4488

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...