這是一個邏輯錯誤的通用問題和答案,我在新程式設計師用各種語言提出的許多問題中都看到過。
問題是在陣列中搜尋與某些輸入條件相符的元素。演算法的偽代碼如下所示:
for each element of Array: if element matches criteria: do something with element maybe break out of loop (if only interested in first match) else: print "Not found"
即使成功找到匹配元素,此程式碼也會報告「未找到」。
問題是,當您透過數組線性搜尋某些內容時,直到到達數組末尾時您才知道沒有找到它。問題中的程式碼針對每個不匹配的元素報告“未找到”,即使可能存在其他匹配元素。
簡單的修改是使用一個變數來追蹤您是否發現了某些內容,然後在循環結束時檢查該變數。
Python 在其
for
迴圈中有一個else:
區塊。僅當循環運行完成時才執行程式碼,而不是因為使用break
而結束。這使您可以避免found
變數(儘管它可能對以後的處理仍然有用):某些語言具有內建機制,可以使用這些機制來取代編寫自己的循環。
any
或some
函數,它們接受回呼函數,並傳回一個布林值,指示函數對於陣列的任何元素是否成功。find
或index
函數來搜尋匹配元素。如果您要頻繁搜索,最好將數組轉換為可以更有效搜索的資料結構。大多數語言提供
集合
和/或哈希表
資料結構(後者根據語言有許多名稱,例如關聯數組、映射、字典),這些通常是搜尋的時間為O(1),而掃描數組的時間為O(n)。