Prefix Sum VIII
In this example a simple prefix sum approach does the job. Some caveats to keep in mind. First, there is no reason to use a hash table - in this case two simple prefix sum arrays work. Second, watch for overflow, since you're going to be adding up numbers that can grow up to 10^10, use long instead of int. Finally, the calculation of prefix sum is usually straightforward, following the pattern:
PrefixSum[i] == PrefixSum[Last] - PrefixSum[i]
Code is down below, cheers, keep coding.
ACC
Equal Sum Grid Partition I - LeetCode
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
public bool CanPartitionGrid(int[][] grid)
{
long[] rowsPrefixSum = new long[grid.Length];
long[] colsPrefixSum = new long[grid[0].Length];
for (int row = 0; row < grid.Length; row++)
{
for (int col = 0; col < grid[row].Length; col++)
{
rowsPrefixSum[row] += grid[row][col];
colsPrefixSum[col] += grid[row][col];
}
}
//Prefix sum
for (int i = 1; i < rowsPrefixSum.Length; i++)
rowsPrefixSum[i] += rowsPrefixSum[i - 1];
for (int i = 1; i < colsPrefixSum.Length; i++)
colsPrefixSum[i] += colsPrefixSum[i - 1];
//Process
for (int i = 0; i < rowsPrefixSum.Length - 1; i++)
{
if (rowsPrefixSum[i] == rowsPrefixSum[rowsPrefixSum.Length - 1] - rowsPrefixSum[i])
return true;
}
for (int i = 0; i < colsPrefixSum.Length - 1; i++)
{
if (colsPrefixSum[i] == colsPrefixSum[colsPrefixSum.Length - 1] - colsPrefixSum[i])
return true;
}
return false;
}

Comments
Post a Comment