例如,给定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
谢谢大家!
我认为你需要组合,算法的组合和唯一性。它会起作用的。示例如下。
来源:获取对象中所有项组合的高效算法
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)。我能用动态规划在多项式时间内求解吗?