Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Chia mảng thành 3 phần tổng bằng nhau trong JavaScript

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