3546. Equal Sum Grid Partition I
Description
You are given an m x n matrix grid of positive integers. Your task is to determine if it is possible to make either one horizontal or one vertical cut on the grid such that:
- Each of the two resulting sections formed by the cut is non-empty.
- The sum of the elements in both sections is equal.
Return true if such a partition exists; otherwise return false.
Example 1:
Input: grid = [[1,4],[2,3]]
Output: true
Explanation:


A horizontal cut between row 0 and row 1 results in two non-empty sections, each with a sum of 5. Thus, the answer is true.
Example 2:
Input: grid = [[1,3],[2,4]]
Output: false
Explanation:
No horizontal or vertical cut results in two non-empty sections with equal sums. Thus, the answer is false.
Constraints:
1 <= m == grid.length <= 1051 <= n == grid[i].length <= 1052 <= m * n <= 1051 <= grid[i][j] <= 105
Solutions
Solution: Prefix Sum
- Time complexity: O(mn)
- Space complexity: O(1)
JavaScript
js
/**
* @param {number[][]} grid
* @return {boolean}
*/
const canPartitionGrid = function (grid) {
const m = grid.length;
const n = grid[0].length;
let totalSum = 0;
let currentSum = 0;
for (let row = 0; row < m; row++) {
for (let col = 0; col < n; col++) {
totalSum += grid[row][col];
}
}
for (let row = 0; row < m; row++) {
for (let col = 0; col < n; col++) {
currentSum += grid[row][col];
}
if (totalSum - currentSum === currentSum) return true;
}
currentSum = 0;
for (let col = 0; col < n; col++) {
for (let row = 0; row < m; row++) {
currentSum += grid[row][col];
}
if (totalSum - currentSum === currentSum) return true;
}
return false;
};