利用哨兵簡化編程的一個小栗子
阿新 • • 發佈:2018-11-13
char 存在 else 實現 如果 代碼 返回 比較 mage
// 在數組 a 中,查找 key,返回 key 所在的位置 // 其中,n 表示數組 a 的長度 // 我舉 2 個例子,你可以拿例子走一下代碼 // a = {4, 2, 3, 5, 9, 6} n=6 key = 7 // a = {4, 2, 3, 5, 9, 6} n=6 key = 6 int find(char* a, int n, char key) { if(a == null || n <= 0) { return -1; } // 這裏因為要將 a[n-1] 的值替換成 key,所以要特殊處理這個值 if (a[n-1] == key) { returnn-1; } // 把 a[n-1] 的值臨時保存在變量 tmp 中,以便之後恢復。tmp=6。 // 之所以這樣做的目的是:希望 find() 代碼不要改變 a 數組中的內容 char tmp = a[n-1]; // 把 key 的值放到 a[n-1] 中,此時 a = {4, 2, 3, 5, 9, 7} a[n-1] = key; int i = 0; // while 循環比起代碼一,少了 i<n 這個比較操作 while (a[i] != key) { ++i; } // 恢復 a[n-1] 原來的值, 此時 a= {4, 2, 3, 5, 9, 6}a[n-1] = tmp; if (i == n-1) { // 如果 i == n-1 說明,在 0...n-2 之間都沒有 key,所以返回 -1 return -1; } else { // 否則,返回 i,就是等於 key 值的元素的下標 return i; } }
把數組最後一個值存一下,並替換成key。這樣遍歷數組時就少了一個比較的過程:while(i<n)
現在只需要:
while (a[i] != key) {
++i;
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
題 外
如何鍛煉寫鏈表能力?886有空的時候多實現幾次就行了
練習題LeetCode對應編號:206,141,21,19,876。
利用哨兵簡化編程的一個小栗子