以下是我的代碼,用于從下面給出的陣列中查找重復值對的數量。
ar = [1 1 3 1 2 1 3 3 3 3] 這個陣列的答案是 3。但預期的輸出是 4。解釋:給定陣列中的對是 (1,1), (3,3), (1, 1),(3,3)等對數為4(預期輸出。
但是相同的代碼為以下陣列提供了正確的結果。
ar = [10 20 20 10 10 30 50 10 20] 這個陣列的答案是 3,預期輸出也是 3。解釋:在這個陣列中,對是 (10,10), (20,20), (10,10)因此對數為 3(預期輸出)。
function sockMerchant(n, ar) {
let dups = 0;
for (let i=0; i<ar.length; i ){
for (let j=i 1; j<ar.length; j ){
if (ar[i]==ar[j]){
dups ;
}
}
break;
}
return dups;
}
uj5u.com熱心網友回復:
您的嵌套迭代方法不起作用,因為您需要將內部回圈中找到的對的值排除在再次迭代之外。
在這種情況下,您需要另一個資料結構,例如 aSet或物件來排除具有一對第二個值的索引。
您仍然有嵌套迭代的問題。
為了克服這個問題,您可以使用一個哈希表并計算相同的值,如果計數2增加一個總計數器并重置哈希值。
function countPairs(array) {
const pairs = {};
let count = 0;
for (const value of array) {
pairs[value] = (pairs[value] || 0) 1;
if (pairs[value] === 2) {
count ;
pairs[value] = 0;
}
}
return count;
}
console.log(countPairs([1, 1, 3, 1, 2, 1, 3, 3, 3, 3])); // 4
console.log(countPairs([10, 20, 20, 10, 10, 30, 50, 10, 20])); // 3
uj5u.com熱心網友回復:
這是另一個解決方案
const countPairs = (arr) => {
const copy = [...arr];
let count = 0;
while(copy.length) {
const first = copy.shift();
const matchIndex = copy.indexOf(first);
if (matchIndex !== -1) {
count = 1;
copy.splice(matchIndex, 1)
}
}
return count;
};
countPairs([10, 20, 20, 10, 10, 30, 50, 10, 20]) // 3
countPairs([1, 1, 3, 1, 2, 1, 3, 3, 3, 3]) // 4
uj5u.com熱心網友回復:
只是另一種解決方案Set:
function sockMerchant(socks) {
let foundPairs = 0;
const singleSocks = new Set();
for (let sock of socks) {
if (singleSocks.has(sock)) {
singleSocks.delete(sock);
foundPairs ;
} else {
singleSocks.add(sock);
}
}
return foundPairs;
}
console.log(sockMerchant([1, 1, 3, 1, 2, 1, 3, 3, 3, 3])); // 4
console.log(sockMerchant([10, 20, 20, 10, 10, 30, 50, 10, 20])); // 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/457431.html
標籤:javascript
上一篇:從兩個陣列創建二維陣列
