给你一个数组 nums 。数组「动态和」的计算公式为:runningSum = sum(nums[0]...nums) 。请返回 nums 的动态和。【暴力求解】
输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
前缀和 就是从 nums 数组中的第 0 位置开始,累加到第 i 位置的结果,我们常把这个结果保存到数组 preSum 中,记为 preSum。【前缀和求解】
preSum = nums[0] + nums[1] + ... + nums[i-1]则对于前缀和数组的任一项有:preSum = preSum[i-1] + nums[i-1],此时只需谨记前缀和数组的下标与原数组下标不是直接对应,而是加一对应。即 preSum 表示 nums 前 i-1 项的,不包含当前元素 nums。
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。[题目分析]:看见子数组首先就想到双指针和滑动窗口,看似可以通过维护一个可变窗口,窗口中元素和为 k,但数组不是有序,即当窗口中的数大于 k 时,移动右指针以及移动左指针都可能使得元素和变小,也就是没有明确的指针移动判断条件,因此无法通过滑动窗口解决。
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:[题目分析]:该题整体思路与实例 3 相同,使用哈希表存放前缀和,对于当前位置的前缀和 s,如果存在前缀和 q,有 s-q 为 k 的倍数。很明显,k 不是一个确定的数,而是多个不同数的集合,此时如果再使用实例 3 中相同方法则无法实现(超时,因为要把 s 减去所有小于s的 k 的倍数都计算一遍)。
子数组大小 至少为 2 ,且
子数组元素总和为 k 的倍数。
如果存在,返回 true ;否则,返回 false 。
如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。0 始终视为 k 的一个倍数。
给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。[题目分析]:一开始会想到维护一个大小可变的滑动窗口,窗口中 0,1 个数相等。但是当个数不相等时,移动左右指针都可能使得个数相等,因此无法使用滑动窗口。如果直接使用前缀和,0,1 个数相等的区间 [i, j] 情况是:j - i + 1 == 2 * (preSum[j+1] - preSum),其中位置 i 和 preSum 都不确定,可以依次尝试判断,但时间复杂度高。
给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。[题目分析]:子数组和即区间和,通过前缀和可求得。而要所有奇数长度的区间和,当求得区间和后,可通过固定大小的滑动窗口,大小为小于等于数组长度的所有奇数,求得每个窗口的区间和即可。
子数组 定义为原数组中的一个连续子序列。
请你返回 arr 中 所有奇数长度子数组的和 。
给定一个由非重叠的轴对齐矩形的数组 rects ,其中 rects = [ai, bi, xi, yi] 表示 (ai, bi) 是第 i 个矩形的左下角点,(xi, yi) 是第 i 个矩形的右上角点。设计一个算法来随机挑选一个被某一矩形覆盖的整数点。矩形周长上的点也算做是被矩形覆盖。所有满足要求的点必须等概率被返回。[题目分析]:题目的关键,选择矩形的点必须等概率被返回。这里的等概率,首先要等概率得选择矩形,然后再等概率得选择矩形中的点。
在给定的矩形覆盖的空间内的任何整数点都有可能被返回。
请注意 ,整数点是具有整数坐标的点。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |