Mô tả vấn đề
Chúng ta cần viết hàm JavaScript nhận vào mảng số nguyên làm đối số duy nhất. Hàm trả về true nếu và chỉ nếu có thể chia mảng thành 3 phần không rỗng có tổng bằng nhau, ngược lại false.
Ví dụ, nếu đầu vào là:
const arr = [3, 3, 6, 5, -2, 2, 5, 1, -9, 4];
Thì đầu ra nên là:
const output = true;
Giải thích đầu ra
Vì: 3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
Ví dụ minh họa
Mã thực hiện (O(n)):
const arr = [3, 3, 6, 5, -2, 2, 5, 1, -9, 4];
const thirdSum = (arr = []) => {
const sum = arr.reduce((acc, val) => acc + val, 0);
if(!Number.isInteger(sum / 3)){
return false;
};
let count = 0;
let curr = 0;
const target = sum / 3;
for(const num of arr){
curr += num;
if(curr === target){
curr = 0;
count += 1;
};
};
return count === 3 && curr === 0;
};
console.log(thirdSum(arr));Đầu ra
Kết quả trong console sẽ là:
true