
前缀和
一维前缀和
二维前缀和
阿.荣.
勿弃
展开
-
leetcode 1314.矩阵区域和【二维前缀和(模板)】
给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和:i - k <= r <= i + k,j - k <= c <= j + k 且(r, c) 在矩阵内。示例 1:输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1输出:[[12,21,16],[27,45,33],[24,39,28]]示例 2:输入原创 2021-09-05 16:06:01 · 222 阅读 · 0 评论 -
leetcode 1139.最大的以1为边界的正方形
给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。示例 1:输入:grid = [[1,1,1],[1,0,1],[1,1,1]]输出:9示例 2:输入:grid = [[1,1,0,0]]输出:1提示:1 <= grid.length <= 1001 <= grid[0].length <= 100grid[i][j] 为 0 或 1Rel原创 2021-09-05 16:02:42 · 238 阅读 · 0 评论 -
leetcode 1292.元素之和小于等于阈值的正方形区域的最大边长【二维前缀和+二分查找】
给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold。请你返回元素总和小于或等于阈值的正方形区域的最大边长;如果没有这样的正方形区域,则返回 0 。示例 1:输入:mat = [[1,1,3,2,4,3,2],[1,1,3,2,4,3,2],[1,1,3,2,4,3,2]], threshold = 4输出:2解释:总和小于或等于 4 的正方形的最大边长为 2,如图所示。示例 2:输入:mat = [[2,2,2,2,2],[2,2,2,2,2],[2,2,2,原创 2021-09-05 15:59:58 · 173 阅读 · 0 评论 -
leetcode 363. 矩形区域不超过 K 的最大数值和【二维前缀和+二分查找】
给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。示例 1:输入:matrix = [[1,0,1],[0,-2,3]], k = 2输出:2解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。示例 2:输入:matrix = [[2,2,-1]], k = 3输出:3提示:m =原创 2021-09-05 15:55:00 · 179 阅读 · 0 评论 -
leetcode 面试题 17.24. 最大子矩阵【二维前缀和+最长子序列】
给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:输入:[[-1,0],[0,-1]]输出:[0,1,0,1]解释:输入中标粗的元素即为输出所表示的矩阵说明:1 <= matrix.length, matrix[原创 2021-09-05 15:51:40 · 111 阅读 · 0 评论 -
leetcode 1074. 元素和为目标值的子矩阵数量【二维前缀和+枚举】
给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。如果 (x1, y1, x2, y2) 和 (x1’, y1’, x2’, y2’) 两个子矩阵中部分坐标不同(如:x1 != x1’),那么这两个子矩阵也不同。示例 1:输入:matrix = [[0,1,0],[1,1,1],[0,原创 2021-09-05 15:47:55 · 126 阅读 · 0 评论 -
leetcode 930. 和相同的二元子数组【一维前缀和+HashMap】
给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。子数组 是数组的一段连续部分。示例 1:输入:nums = [1,0,1,0,1], goal = 2输出:4解释:有 4 个满足题目要求的子数组:[1,0,1]、[1,0,1,0]、[0,1,0,1]、[1,0,1]示例 2:输入:nums = [0,0,0,0,0], goal = 0输出:15提示:1 <= nums.length <= 3 * 10原创 2021-08-30 16:55:39 · 130 阅读 · 0 评论 -
leetcode 523. 连续的子数组和【一维前缀和+Hashmap+同余定理】
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。0 始终视为 k 的一个倍数。示例 1:输入:nums = [23,2,4,6,7], k = 6输出:true解释:[2,4] 是一个大小为 2 的子数组,并且和为 6 。示原创 2021-08-30 16:35:20 · 184 阅读 · 1 评论 -
leetcode 974. 和可被 K 整除的子数组【一维前缀和+Hashmap+同余定理】
给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。示例:输入:A = [4,5,0,-2,-3,1], K = 5输出:7解释:有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]提示:1 <= A.length <= 30000-10000 <= A[i] <= 10000原创 2021-08-29 10:38:59 · 123 阅读 · 0 评论 -
leetcode 1248. 统计「优美子数组」【一维前缀和】
给你一个整数数组 nums 和一个整数 k。如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中「优美子数组」的数目。示例 1:`输入:nums = [1,1,2,1,1], k = 3输出:2解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。示例 2:输入:nums = [2,4,6], k = 1输出:0解释:数列中不包含任何奇数,所以不存在优美子数组。示例 3:输入:nums = [2,2,2,1,原创 2021-08-28 23:09:43 · 147 阅读 · 0 评论 -
leetcode 560. 和为K的子数组【一维前缀和】
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :1.数组的长度为 [1, 20,000]。2.数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。思路:对于元素nums[i]和num[j],i<j,如果前缀和suffix_sum[i]+k == suffix_sum[j],则num原创 2021-08-28 22:52:07 · 114 阅读 · 0 评论 -
leetcode 724. 寻找数组的中心下标【一维前缀和】
给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:中心下标是 3 。左侧数之和 sum = nums[0]原创 2021-08-28 21:35:23 · 214 阅读 · 0 评论