相关疑难解决方法(0)

检查几组对是否覆盖给定的一对对

假设我们有N成对的数组,例如N=3:

A 1 =[ [3,2], [4,1], [5,1], [7,1], [7,2], [7,3] ]

2 =[ [3,1], [3,2], [4,1], [4,2], [4,3], [5,3], [7,2] ]

A 3 =[ [4,1], [5,1], [5,2], [7,1] ]

我们可以假设每个数组中的对按第一个数字排序,然后按第二个数字排序.此外,同一对不会多次出现在同一个数组中(同一对可以出现在多个数组中,如上所示).

每对中的数字是任意整数> = 1.

我怎么能找到k满足的所有东西:

在此输入图像描述

(简单来说,[k,1], [k,2], ... , [k,N]存在于不同的数组中)

上述示例的预期结果是:[5, 7].

注意:速度是算法最重要的因素,然后是内存.如果它有助于优化速度/内存,请假设N <= 10.数组中的对数可以是~50000.

javascript arrays algorithm data-structures

7
推荐指数
1
解决办法
223
查看次数

JS调用函数,所有可能的参数都被置换

考虑以下数组:

var array1 = [true, false];
var array2 = [1, 2];
var array3 = ["a", "b", "c"];
Run Code Online (Sandbox Code Playgroud)

我想myFunc(arg1, arg2, arg3)用所有参数组合调用我的函数.但我想避免"预告"地狱.

有可能写函数允许我这样,所以我可以称之为:

cartesianCall(array1, array2, array3, myFunc);
Run Code Online (Sandbox Code Playgroud)

理想情况下,数组的变量数(myFunc参数)?

编辑:所以函数将被调用:

myFunc(true, 1, "a");
myFunc(true, 1, "b");
myFunc(true, 1, "c");
myFunc(true, 2, "a");
myFunc(true, 2, "b");
myFunc(true, 2, "c");
myFunc(false, 1, "a");
myFunc(false, 1, "b");
myFunc(false, 1, "c");
myFunc(false, 2, "a");
myFunc(false, 2, "b");
myFunc(false, 2, "c");
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
2
解决办法
191
查看次数

迭代两个变量的所有排列

我需要调用以下函数cross4次,对于xy变量的所有排列,值为1和-1;

我的方法:

var p = [-1, 1];

p.forEach(function(x) {
  p.forEach(function(y) {
    cross(x, y);
  });
});
Run Code Online (Sandbox Code Playgroud)

有没有更短的方法这样做?

javascript

5
推荐指数
1
解决办法
144
查看次数

正则表达式:匹配DNA序列的排列

如何制作正则表达式来评估以下字符串?

TGATGCCGTCCCCTCAACTTGAGTGCTCCTAATGCGTTGC

并提取模式CTCCT.

模式必须是3 C和2 T的任何顺序.

我试过/ [C | T] {5} /但它与CCCCT和TCCCC相匹配

提前致谢.

javascript regex

5
推荐指数
1
解决办法
523
查看次数

如何优化我的函数,它取一个正整数并返回下一个较小的正整数?

我正在尝试编写一个函数,它接受一个正整数并返回包含相同数字的下一个较小的正整数,并且当没有包含相同数字的较小数字时返回-1.

For example:

nextSmaller(21) == 12
nextSmaller(531) == 513
nextSmaller(2071) == 2017
Run Code Online (Sandbox Code Playgroud)

我写了一个解决这个问题的代码,但我真的不知道如何进一步优化它.请你帮助我好吗?它在repl.it上运行得相当快,但是当我提交它时,它表示它需要超过1200毫秒并且不允许我提交它,即使所有测试都通过了.

function nextSmaller(n) {
var nArray= n.toString().split("")
var minimumNum = 1 + Array(nArray.length).join('0')
for(var i=n-1; i >= minimumNum; i--) {
  var newNumArray = i.toString().split('');
  var counter = 0;
  for (var j=0; j<newNumArray.length; j++) {
    if (nArray.indexOf(newNumArray[j]) > -1) {
        counter++
        nArray.splice(nArray.indexOf(newNumArray[j]), 1)
        if (counter === n.toString().split("").length) {
        return i;
        }
     } 
  }
       nArray = n.toString().split("");
       if (i === Number(minimumNum)) return -1;
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript string algorithm math numbers

5
推荐指数
2
解决办法
650
查看次数

给定一个数组,如何生成子集大小 k 的所有组合?

如此给出input = [1, 2, 3]k=2这将返回:

1 2
1 3
2 1
2 3
3 1
3 2
Run Code Online (Sandbox Code Playgroud)

这是最接近我正在寻找的,但不完全是:http://algorithms.tutorialhorizo​​n.com/print-all-combinations-of-subset-of-size-k-from-given-array/

^ 缺少结果,例如2 13 13 2等。

其次,我不确定我是否正确命名了这个问题,因为“大小 k 的子集的所有组合”的解决方案没有给出预期的答案。

javascript algorithm permutation subset combinatorics

5
推荐指数
1
解决办法
3625
查看次数

Javascript创建一个具有唯一值组合的数组

尽管阅读了很多关于排列/组合的Q/A:查找JavaScript数组值的所有组合 + JavaScript - 从具有m个元素的n个数组生成组合我还没有找到正确的方法来获得我正在寻找的那种结果.我有一个10值数组:

var arr = [0,1,2,3,4,5,6,7,8,9];
Run Code Online (Sandbox Code Playgroud)

如果我是对的,所有可能的唯一值的置换数组(没有重复)的数量:

[5,9,1,8,2,6,7,0,4,3] [4,8,0,2,1,9,7,3,6,5] ...
Run Code Online (Sandbox Code Playgroud)

是2x3x4x5x6x7x8x9x10 = 3628800

我正在尝试生成一个动态创建'n'数组的函数.例如:

function createArray(0) -> [0,1,2,3,4,5,6,7,8,9]
function createArray(45648) -> [0,1,5,3,2,8,7,9,6] (something like...)
function createArray(3628800) -> [9,8,7,6,5,4,3,2,1,0]
Run Code Online (Sandbox Code Playgroud)

我想要实现它的方式是:

  • createArray(1)置换最后2个符号(8,9 - > 9,8)

  • createArray(2-> 6)置换最后3个符号(8,7,9 - > 9,8,7)

  • createArray(3628800):所有值都被置换(9-> 0)

你认为这可行/容易吗?如果是的话怎么办?

[编辑]

谢谢你的回答

function permute(permutation, val) {

  var length = permutation.length,
  result = [permutation.slice()],
  c = new Array(length).fill(0),
  i = 1, k, p,
  n = 0;
  while (i < length) {
  if (c[i] < i) …
Run Code Online (Sandbox Code Playgroud)

javascript arrays combinations permutation

5
推荐指数
1
解决办法
393
查看次数

Javascript - 通过递归生成所有彩票组合

我正在尝试编写一种递归生成所有彩票组合的算法.

这是一个无递归变量,可用于获得C(max,6).例如c(7,6)

let min = 1;
let max = 7;
let lotteryNum = 0;
let outputString = [];
for (let a = min; a <= max - 5; a++) {
    for (let b = a + 1; b <= max - 4; b++) {
        for (let c = b + 1; c <= max - 3; c++) {
            for (let d = c + 1; d <= max - 2; d++) {
                for (let e = d + 1; e …
Run Code Online (Sandbox Code Playgroud)

javascript algorithm recursion combinations

3
推荐指数
1
解决办法
722
查看次数

您可以使用 Array.flatMap 在 Javascript 中返回 n 个选择 k 个组合吗?

例如,这是 5 选择 2:

    var array = [0,1,2,3,4];
    
    var result = array.flatMap(
        (v, i) => array.slice(i+1).map(w => [v, w]) 
    );
    
    console.log(result);
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用这种方法做 5 选择 3?

javascript arrays probability

3
推荐指数
1
解决办法
166
查看次数

具有置换长度参数的javascript置换生成器

我在那里看到了一些发电机,但它们都制成了一个平方矩阵.例如,你给它一个三个项目的列表,它将假设长度的输出也是三个.但是,我想指定项目和长度.

声音就像一个简单的问题,不能相信没有可用的库.如果那里有一个经过测试的库,我想避免自己写这个.任何建议都会很棒.

我发现的例子

var list = 'abc';
perms = permutations(list);
//you cannot define the length
Run Code Online (Sandbox Code Playgroud)

var list = 'abc';
var length = 3;

perms = permutations(list,length);

console.log(perms);

/* output
a,a,a
a,b,c
a,b,a
a,c,a
c,a,a
...
*/
Run Code Online (Sandbox Code Playgroud)

我希望能够改变长度,并相应地创建排列

length = 2

a,a
a,b
b,b
b,a

length = 4

a,a,a,a 
a,a,a,b
....
Run Code Online (Sandbox Code Playgroud)

javascript permutation node.js

2
推荐指数
2
解决办法
3689
查看次数