当前位置: 首页 > 知识库问答 >
问题:

给定一个数组,写一个函数返回该数组所有可能的三元组/序列?Java Script语言

戚弘和
2023-03-14

例如,给定A=[1,2,1,1],函数应该返回3。

仅创建三个不同的序列:(1,2,1)、(1,1,1)和(2,1,1)。此示例的正确答案是3。

>

  • 给定A=[1,2,3,4],函数应该返回4。有四种方式:(1,2,3),(1,2,4),(1,3,4)和(2,3,4)

    给定A=[2,2,2],函数应该返回1。只有一种方法:(2,2,2)

    给定< code>A = [2,2,1,2,2],该函数应该返回4。有四种方式:< code>(1,2,2),(2,1,2),(2,2,1)和(2,2,2)。

    给定A=[1,2],函数应该返回0

    为以下假设编写有效的算法:

    N是[0..100000]范围内的整数;数组A的每个元素都是[1..N]范围内的整数。

    这是我下面的蛮力解决方案!

    我想知道是否有人有更好,更优化的解决方案?

    检测到此解决方案的时间复杂度:O(N**3* 对数(N))或 O(N**4)

    const theatreTickets = (array) => {
      let combos = []
      if(array.length < 2) {
        combos.length = 0
      }
    
      for(let i = 0; i <= array.length; i++) {
        for(let j = i + 1; j <= array.length - 1; j++) {
          for(let k = j + 1; k <= array.length - 1; k++) {
            combos.push([array[i], array[j], array[k]])
          }
        }
      }
      combos = Array.from(new Set(combos.map(JSON.stringify)), JSON.parse)
      return combos.length
    }
    
    
    console.log(theatreTickets([1, 2, 1, 1])) // Should Be 3
    

    谢谢大家!

  • 共有1个答案

    吴飞语
    2023-03-14

    我认为你需要组合,算法的组合和唯一性。它会起作用的。示例如下。

    来源:获取对象中所有项组合的高效算法

    function combine(items, numSubItems) {
            var result = [];
            var indexes = new Array(numSubItems);
            for (var i = 0 ; i < numSubItems; i++) {
                indexes[i] = i;
            }
            while (indexes[0] < (items.length - numSubItems + 1)) {
                var v = [];
                for (var i = 0 ; i < numSubItems; i++) {
                    v.push(items[indexes[i]]);
                }
                result.push(v);
                indexes[numSubItems - 1]++;
                var l = numSubItems - 1; // reference always is the last position at beginning
                while ( (indexes[numSubItems - 1] >= items.length) && (indexes[0] < items.length - numSubItems + 1)) {
                    l--; // the last position is reached
                    indexes[l]++;
                    for (var i = l +1 ; i < numSubItems; i++) {
                        indexes[i] = indexes[l] + (i - l);
                    }
                }        
            }
            return result;
        }
    
        var combinations = combine([1,2,1,1], 3);
        console.log([...new Set(combinations.map(x => x.join(",")))]);
        combinations = combine([1,2,3,4], 3);
        console.log([...new Set(combinations.map(x => x.join(",")))]);
     类似资料:
    • 编写一个程序,返回一个新数组,该数组包含所有大于数组中第一个值的值。如果数组中没有大于第一个值的值,则返回空数组。如果数组为空,则返回一个空数组。 我这样解决这个问题: 谢谢

    • 本文向大家介绍返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值,包括了返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个函数,该函数需要一个正整数,并返回一个数组,该数组填充有该数字的所有数字的位置值。 例如- 让我们为该函数编写代码。 这个问题非常适合递归方法,因为我们将迭代数字的每个数字。因此,

    • 我正在从第三方网站(家庭用电)检索JSON,根据我从网站请求的内容,返回的JSON可能是也可能不是数组。例如,如果我请求我的智能电表列表,我会得到这个(由于尺寸大,结果被截断): 其中 gwrcmd 是单个元素。 但是如果我要求过去半个小时的用电,我会得到这个: 看看 gwrcmd 现在是一个数组吗? 在我的Go应用程序中,我有一个类似这样的结构(再次,被截断,因为它持续了一段时间。“版本”下有更

    • 我如何排序一个数组尽可能接近一个目标数组。 例如: 数组最多只能包含4个元素: 但在不是的情况下,排序应如下所示: 排序为 排序为 标准是使它尽可能接近,并且在不存在特定元素的地方,跳过它。 我当前的代码似乎做得不对,我把它包含在下面: null null 我怎么修好它?

    • 给定一个字符串数组,单词,返回该数组,其中包含所有偶数长度的字符串,并将其替换为空字符串。 如何返回字符串?我需要返回字符串以便为偶数打印空白,但现在我只是返回一个计数。这是我的代码,我认为一切都是正确的,我只是不知道如何返回它?

    • 可能的子集:- 我只能想到一个朴素的算法,它列出集合的所有子集,并检查子集和是否>=k,但它是一个指数算法,列出所有子集需要O(2^n)。我能用动态规划在多项式时间内求解吗?