扑克牌排序问题

发布于 2022-09-12 00:28:19 字数 100 浏览 17 评论 0

一副打乱的牌里有两对对子,其余的都是单牌。现在要求先升序输出两对对子,再升序输出其余的单牌。请问诸位大佬有解题思路吗?
我想过用set排序同时找出来重复的牌,但总感觉复杂度太高了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

何时共饮酒 2022-09-19 00:28:19

引入权重的思路,排面为 n 则权重加 n,符合某些规则(如单张)权重加个 1000,这个值能保证比所有单张排面都大就行了,然后根据权重升序排序就好了。
一般编程需要都有提供自定义排序对比方法,把这个算法写进去就行了

野心澎湃 2022-09-19 00:28:19

申请一个数组,对牌做映射。比如草花1,映射到1位置,方片k映射到某位置。数组的值存储什么花色,逗号分隔。遍历一遍牌后,按顺序输出就好了。

唯憾梦倾城 2022-09-19 00:28:19

先遍历一次把对子找出来放在一个单独的数组里,再将剩余的牌排序,之后合并两个数组就好了。

决绝 2022-09-19 00:28:19
let list = [10, 'A', 1, 3, 3, 4, 5, 6, 7, 8, 7]
let map = list.reduce((acc, item) => {
  if (acc[item]) {
    acc[item] = ++acc[item]
  } else {
    acc[item] = 1
  }
  return acc
}, {})

let keys = Object.keys(map)
let doubleList = keys.filter(item => map[item] === 2) // ["3", "7"]
let singleList = keys.filter(item => map[item] === 1) // ["1", "4", "5", "6", "8", "10", "A"]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文