给定一个数组,如何找到加起来为60的一对(两个值)或一个可被60整除的值.注意:必须比O(N ^ 2)快.
输入:[10,50,30,90]输出:2推理:10 + 50 = 60,30 + 90 = 120(120可被60整除)
输入:[60,60,60]输出:3推理:60 + 60 = 120,60 + 60 = 120,60 + 60 = 120
我下面的代码将在O(N)时间内运行,但我不知道如何处理彼此相等的对(即如果你在数组中有2 30个值会给你的计数器加1 ,但是如果你在数组中有3 30个值可以为你的计数器增加3个).我想我应该创建一个组合函数(即2C2或3C2),但这是一个线性函数,并不会只是使函数回到O(N ^ 2)?
values(myList) {
var obj = {};
var count = 0;
// loop through array and mod each value and insert it into a dictionary
myList.forEach((elem, index) => {
if (!obj.hasOwnProperty(elem % 60)) {
obj[elem % 60] = 1;
} else {
obj[elem % 60]++;
}
});
for (var keys …Run Code Online (Sandbox Code Playgroud)