JavaScript中能否將陣列分成n個和相等的子陣列
我們需要編寫一個JavaScript函式,該函式接收一個數字陣列`arr`作為第一個引數,一個數字`num`作為第二個引數。
該函式應該確定是否存在一種方法可以將陣列`arr`的元素分配到`num`個組中,使得所有組的總和相等。如果存在這樣的方法,我們的函式應該返回`true`,否則返回`false`。
例如:
如果輸入陣列和數字是:
const arr = [4, 6, 3, 3, 7, 4, 1]; const num = 4;
那麼輸出應該是:
const output = true;
因為四個組是:[7],[1, 6],[4, 3],[4, 3]
示例
程式碼如下:
const arr = [4, 6, 3, 3, 7, 4, 1];
const num = 4;
const canDivide = (arr = [], num = 1) => {
const sum = arr.reduce((acc, num) => acc + num);
if (sum % num !== 0 || arr.some(num => num > sum / num)) {
return false;
}
const used = new Set();
return (function find(start, target) {
if (used.size === arr.length) {
return true;
}
if (target < 0) {
return false;
}
if (target === 0) {
return find(0, sum / num);
}
for (let i = start; i < arr.length; i++) {
if (!used.has(i)) {
used.add(i);
if (find(i + 1, target - arr[i])) {
return true;
}
used.delete(i);
}
}
return false;
})(0, sum / num);
};
console.log(canDivide(arr,num));我們在解決方案中採取的步驟:
步驟1.如果總和不能被`num`整除,或者其中一個數字大於總和/`num`,我們返回`false`。
步驟2.我們使用HashSet來跟蹤已使用的數字。
步驟3.我們開始尋找子分割槽。
如果所有數字都已使用,則完成。
如果子集和過大,我們停止搜尋。
如果我們找到一個子集,我們將繼續搜尋直到使用所有數字。
最後,我們嘗試每個未使用的數字。
輸出
控制檯中的輸出將是:
true
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP