为了账号安全,请及时绑定邮箱和手机立即绑定

数组分页未知失败

数组分页未知失败

收到一只叮咚 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 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信