我正在尝试将元素的每个单独组合放入一个数组中。现在,我可以使用下面的方法,并删除重复项,但是这种方式对于我来说慢得多。
下面的代码将找到每个可能组合的2位数字下面。4.现在,在我实际上想要使用的代码中,最小的代码将是6个for循环(彼此之间)数量为18(请注意,这是最小值)。
下面的代码将执行amount^[amount of for loops]
或amount^2
,在这种情况下为16。这意味着在我要使用的代码中,它执行了18^6
次,或者 3400万次。这是最小值,它会提高很多。
尝试运行我的代码(具有amount = 18
的6个循环)后,它使我的浏览器崩溃了。我的问题是:是否有更快,更高效的方法(< strong>不优雅。我不在乎浏览器不会崩溃的优雅程度)。
注意:此问题不是重复问题。所有其他问题都只是要求一种方法来实现,但是我已经有了一种方法。我只是想使其更高效,更快,以便其实际正常工作。
let combinations = [];
let amount = 4;
for (let a = 0; a < amount; a++) {
for (let b = 0; b < amount; b++) {
combinations.push(`${a}${b}`);
}
}
console.log(combinations);
下面是一个片段,提供了有关我的代码如何工作的可能示例。
let possibilities = [];
let amount = 6; //Amount is set by me, so don't worry about it being incorrect
for (let a = 0; a < amount; a++) {
for (let b = 0; b < amount; b++) {
possibilities.push(a + b);
}
}
possibilities = [...new Set(possibilities)]; //Removes duplicates
possibilities.sort((a, b) => b - a); //Sorts in descending order
possibilities = possibilities.slice(0, 3); //Gets top 3 values
console.log(possibilities);
答案 0 :(得分:2)
好,如评论中所述,如果您需要特定数量的前3个值,则可以执行以下简单操作:
<Chart
chartType="ScatterChart"
width="80%"
height="400px"
data={data}
options={options}
legendToggle
chartEvents={[
{
eventName: "ready",
callback: ({ chartWrapper, google }) => {
const chart = chartWrapper.getChart();
google.visualization.events.addListener(chart, "onmouseover", e => {
const { row, column } = e;
console.warn("MOUSE OVER ", { row, column });
});
google.visualization.events.addListener(chart, "onmouseout", e => {
const { row, column } = e;
console.warn("MOUSE OUT ", { row, column });
});
}
}
]}
/>
答案 1 :(得分:1)
我不知道有什么更好的解决方案,但是是的,您需要先检查一些条件。
If(amount <= 0) return 'Invalid amount, Please enter a valid amount"
因此,如果有人输入负值或零值,则您的循环将进入无限循环,并使情况变得更糟。
if(amount === 1) return '1 possible combination'
由于小于1的数量仅是0,并且0的组合仅是1,因此您无需解析6位数字的整个循环或0的n位数字,因此它将获得1而不是N(n。数字)。
对于大于1的数量,您可以创建手动循环,例如此处您为2位数字创建了2个循环,为6位数字创建了6个循环,为此更好地创建了动态逻辑来自动创建循环数。
您还需要考虑1111
,1112
这种类型的组合,对吗?
或者,如果仅需要1234、2134、2314这种情况?可以以非常低的复杂度完成此操作。
对于复制,您可以将组合存储为键值对。然后Object.Keys将成为您的组合。