我正在解決一個 HackerRank 測驗,其中包括模擬分頁請求。該函數接收一個項目數組、排序參數、排序順序、頁碼和每頁的項目,并返回與給定頁面對應的名稱數組。這些物品有形狀[name: string, relevance: int, price: int]。排序參數為 0 表示名稱,1 表示相關性,2 表示價格。排序順序為 0 表示升序,1 表示降序。我在 JavaScript 和 Python 中嘗試了該函數,以防默認排序函數的工作方式不同并改變結果。這是我在Python3中的實現。def?fetchPaginated(items,?sortParameter,?sortOrder,?pageNum,?itemsPerPage):
??sortedItems?=?sorted(items,?key=lambda?item:?item[sortParameter],?reverse=False?if?sortOrder?==?0?else?True)
??paginatedIdx?=?pageNum?*?itemsPerPage
??slicedItems?=?sortedItems[paginatedIdx:(paginatedIdx?+?itemsPerPage)]??return?map(lambda?item:?item[0],?slicedItems)由于 HackerRank 隱藏了測試用例,因此我不知道失敗測試的輸入。我記得數組的大小是 100 到 1000 的順序,頁碼在 0 到 2 之間,每頁的項目在 1 到 20 之間。排序參數和順序沒有模式(它不像所有失敗的測試都是針對排序參數 1 或類似參數)。有人可以告訴我我的代碼或其背后的算法是否存在我未檢測到的缺陷嗎?也許是一個導致它在邊緣情況下失敗的缺陷?
1 回答

隔江千里
TA貢獻1906條經驗 獲得超10個贊
我在評估時也有這個問題。問題是 的輸入items是字符串的二維列表,而不是[name: string, relevance: int, price: int]. 因此,當您調用 sort 時,您正在對數字字符串而不是實際數字進行排序,這會導致意外的結果。例如:
>>> nums = list(range(1, 6)) + list(range(10, 60, 10))
>>> nums = list(map(str, nums))
>>> nums
['1', '2', '3', '4', '5', '10', '20', '30', '40', '50']
>>> nums.sort()
>>> nums
['1', '10', '2', '20', '3', '30', '4', '40', '5', '50']
一個小的修復是更改關鍵函數,以便將相關性和價格(第 1 列和第 2 列)轉換為整數,同時保留名稱(第 0 列)。
sortedItems = sorted(items, key=lambda item: int(item[sortParameter]) if sortParameter else item[sortParameter], reverse=sortOrder)
添加回答
舉報
0/150
提交
取消