【问题标题】:How to sort an array of integers based on its binary representation in JavaScript?如何根据 JavaScript 中的二进制表示对整数数组进行排序?
【发布时间】:2019-09-24 04:41:48
【问题描述】:

我有一项任务,其中包括在 JavaScript 中创建一个函数,该函数对接收无序整数列表的数组进行排序。该函数必须根据以下条件返回一个有序的整数数组:

  1. 整数的二进制表示中的 1 越多,元素应该越接近索引 0。
  2. 如果两个或多个数字在其二进制表示中的个数相同,则十进制数 价值较小的将更接近开始。

例子:

对于条目:[1, 15, 5, 7, 3]

返回应该是:[15, 7, 3, 5, 1]

解释:

十进制 = 二进制

  • 1 = 1
  • 15 = 1111
  • 5 = 101
  • 7 = 111
  • 3 = 11

二进制表示中包含加一的十进制数是 15(二进制为 1111),因此它将在数组中排在第一位(索引 = 0)。然后继续 7,在其二进制表示中包含三 (111) 个。

那么有 2 个数字的二进制表示包含 相同的个数,这些小数是 5 (101) 和 3 (11),两者都有 2 个。在这种情况下,它将首先(更接近 index = 0)3,因为它的十进制表示更小(3

解决方案:

最后,我找到了解决这个任务的方法:

const binaryOnes = integerArr => {

  let binaryArray = integerArr.map(num => num.toString(2))

  binaryArray.sort((a, b) => {

    let regEx = /1/g
    let A = a.match(regEx).length
    let B = b.match(regEx).length

    if (A < B) return 1
    else if (A > B) return -1
    else {
      let binaryToIntegerA = parseInt(A, 2)
      let binaryToIntegerB = parseInt(B, 2)

      if (binaryToIntegerA < binaryToIntegerB) return -1
      else return 1
    }

  })

  return binaryArray.map(num => parseInt(num, 2))

}

binaryOnes([1,15,5,7,3]) // [ 15, 7, 3, 5, 1 ]

如果有人找到更好的方法来解决它,我将不胜感激。

还有这篇文章的一些反馈(是我在 StackOverflow 上的第一个问题)

谢谢!

【问题讨论】:

  • 请先自己尝试一下,然后让我们知道您是否以及在哪里遇到问题
  • 一种方法:1.将其更改为二进制表示(可能是字符串) 2.排序 3.改回。
  • 您将需要更接近 SO 的代码。 - WWC
  • 感谢您的反馈,这是我在 StackOverflow 中的第一个问题。最后,我得到了解决方案并发布了它。

标签: javascript arrays binary integer


【解决方案1】:

您可以使用类似的方式将数字转换为二进制(字符串类型)

var binary = 134.toString(2);

然后,用

实现两个数字之间的比较功能
function binaryCompare(a, b) {
    a = a.binary;
    b = b.binary;
    //...
}

之后,只需调用

[1,2,34,342]
.map( a => ({value:a, binary: a.toString(2))
.sort(binaryCompare)
.map( v => v.value );

由于我不了解您的目标,我无法实现排序功能。 希望对你有帮助

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2012-12-01
  • 2021-04-23
  • 2021-12-26
  • 2021-10-24
相关资源
最近更新 更多