
原题链接:LeetCode 5925. 统计农场中肥沃金字塔的数目
解题思路:
- 利用前缀和的思维,创建一个存储按行连续的 “1” 的个数的矩阵
- 按分别按 “右下”和 “右上” 方向走步,代表着金字塔的层次增加
- 符合构成金字塔的条件是当前金字塔的最右方拥有至少拥有 2*层数-1 个连续的 “1”
复杂度分析:
时间复杂度:三层循环 O(m2n)
空间复杂度:使用前缀和数组 O(m×n) ,利用原数组grid创建前缀和数组 O(1)
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class Solution { public: int countPyramids(vector<vector<int>>& grid) { int len_g = grid.size(), len_v = grid[0].size(); int num[len_g][len_v]; for(int i = 0; i < len_g; i++){ int t = 0; for(int j = 0; j < len_v; j++){ if(grid[i][j]) num[i][j] = ++t; else num[i][j] = t = 0; } } int ans = 0; for(int i = 0; i < len_g; i++){ for(int j = 0; j < len_v; j++){ if(num[i][j]){ int h = 2, a = i+1, b = j+1; while(a < len_g && b < len_v && h*2-1 <= num[a][b]){ ans++, a++, b++, h++; } h = 2, a = i-1, b = j+1; while(~a && b < len_v && h*2-1 <= num[a][b]) { ans++, a--, b++, h++; } } } } return ans; } };
|
润了,润了
咱们下次题解再见吧~
