亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數組分頁未知失敗

數組分頁未知失敗

收到一只叮咚 2023-10-11 16:00:12
我正在解決一個 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)



查看完整回答
反對 回復 2023-10-11
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號