获取数组 Javascript 的所有整数组合的另一种方法
Another way to get all combination of integers of an array Javascript
我想迭代一个数组并找到所有相差为 2 的对
这是我到目前为止所拥有的:
var numberOfCases = 5;
var diff = 2;
var input = [1,5,3,4,2];
getPossiblepairs(input);
function getPossiblepairs(input){
for(cmp in input){
for(number in input){
if((input[cmp] - input[number]) == diff){
console.log("("+input[cmp]+","+input[number]+")");
}
}
}
}
这有效,但我仍然对使用两个 for 循环感到内疚,因为 bigO 是 O(n^2) 这是唯一的方法吗?
你可以在 O(n log n) 中执行此操作。对数组进行排序,然后在一次传递中遍历它。找到当前元素与接下来两个元素之间的差异,如果一个元素相差 2,则打印出该对。
这应该适用于 n log n 复杂性:
function getPossiblepairs(input, diff){
// Create a copy of the original array, so it is not affected by the next operation
var sortedInput = input.slice();
// Sort the array
sortedInput.sort();
// Iterate through the array, starting from the 0th element
for (var i=0, n=sortedInput.length; i<n; i++){
firstNumber = sortedInput[i];
// Iterate through the array, starting from the (i+1)th element
for (var j=i+1; j<n && sortedInput[j] <= firstNumber + diff; j++){
secondNumber = sortedInput[j];
// if it matches, then log it!
if (secondNumber - firstNumber == diff){
console.log('(' + firstNumber + ', ' + secondNumber + ')');
}
}
}
}
有关阵列复制的更多信息,请参阅此文章。
有关用法和测试,请参阅:http://jsfiddle.net/gycjup5u/2/
你有内存来存储数组的副本吗? 首先对其进行排序,O(n log n),然后在单个 O(n) 传递中挑选出对。
您可以对每个元素使用 indexOf()
方法来确定数组是否包含大于 diff
给出的元素:
function getPossiblePairs(input, diff) {
for(i in input) {
var n = input.indexOf(input[i] + diff);
if(n != -1) {
console.log("(" + input[i] + "," + input[n] + ")");
}
}
}
getPossiblePairs(input, diff);
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- jQuery:使用substr()的另一种方法
- 另一种显示和隐藏按钮的方式
- 单击()的另一种方式
- 解析一个复杂的JavaScript表达式,将其改写为另一种格式
- parseJSON在一种情况下有效,而在另一种情况中无效
- 如何访问对象's成员通过另一种方法填充的方法
- 是否可以在网页上用另一种字体设置jqmath-display的样式
- 用于自动将一种类型的URL更改为另一种类型
- 将日期字符串转换为另一种语言
- Rails 以一种方式格式化 DateTime.now 和 DateTime.yesterday 另一种方式 - 我如何
- 通过javascript将带有日期的字符串格式化为另一种格式
- 输入文本是't在一种情况下以相同的形式更新与另一种情况相同的角度模型
- 将JSON从一种格式转换为另一种格式
- 另一种方式是Javascript中的函数堆叠
- require.js是require的另一种方式
- 如何获得一种颜色的rgb值'It’它接近另一种颜色
- 在创建 toLowerCase 函数时,一种方式比另一种方式更好
- 检查窗口是否为弹出窗口的另一种方法
- 获取数组 Javascript 的所有整数组合的另一种方法