左神课程笔记,前缀和笔记,(前缀和也是想双指针一样管理两个指针之间的区间的)
前缀和(前i个数的和)
个人理解,把前缀和当成两个指针,维护一个区间,例如 i - 1 到 i 这两个双指针之间管理的线段上放着一个a[i-1],感觉差分也能这样理解,a[i - 1 ] - a[i] 之间放着一个差分值
下标i结尾的往左边的 = aim的最长前缀和,思考转换以及思考前缀和性质-->转换为从0开始到右边的最早的前缀和 = sum - aim的位置,只关心最早的,这样才能转换成i结尾往左最大前缀和长度
查出前缀和最早的出现的位置,就能知道往左衍生多少就能凑出这个前缀和了
最早的表是什么,就是哈希表
用哈希表记录前缀和最早的位置,map提前放一条记录
哈希表记录最早出现的位置(哈希表有没有出现过,没有出现过就是最早位置,出现过了就不管了,永远记录最早的位置,只关心i结尾往左最长,查表就能搞定)
0前缀和一定要放-1位置,前0个数值已经确定了,0前缀和最早出现在哪里,没有就错过答案
0累加和没有数的时候就出现过了,加了记录就不会出现错误
-1位置最早凑出0,-1位置下面一个就是我的答案(0-0),map放一条记录
前缀和为0最早出现在-1位置,sum =5,aim=5,5-5最早出现在哪里,出现-1,所以0到当前结尾位置就是我的最大长度
利用哈希表管理最早出现的位置,每个位置以i为结尾的最长下标
往左逆向为从0开始往右最早的前缀和,前缀和以及最早出现的位置
累加和为给定值的子数组数量,哈希表的应用很关键
某一个累加和最早出现的次数,某一个累加和出现了几次
0-i累加和一千,想看整体的累加和,转换,用哈希表的思想,因为我们不要求具体的值
算整体累加和,i结尾子数组累加和100,也就是900这个前缀和出现了几次
累加和以及出现次数(0前缀和没数字时候已经有一次了
前缀和-目标之前出现过几次(0位置多少个,1位置多少个,2..所有位置一共多少个
总体的累加次数,哈希表记录数据的思想,但是我还是不理解,以i结尾,我之前出现过的前缀和为多少个,注意是以i为结尾,所以就遍历i on(两数之和问题,a+b = c转换成a-c = b(遍历a,用哈希表记录值,查看b有没有出现过,如果出现过就加上对应的次数,a随着遍历会改变,b也会改变,只看哈希表有没有出现过(遇到两数之和类似的问题,就用哈希表,这样把两个指针优化到一个指针,只用关心当前出现的值在哈希表中有没有出现过即可,然后把当前出现的值加入哈希表表示出现次数
标签:最早,前缀,位置,笔记,累加,哈希,一些,出现 From: https://www.cnblogs.com/zhoncai45/p/18164238