前缀和的一些笔记

左神课程笔记,前缀和笔记,(前缀和也是想双指针一样管理两个指针之间的区间的)

前缀和(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也会改变,只看哈希表有没有出现过(遇到两数之和类似的问题,就用哈希表,这样把两个指针优化到一个指针,只用关心当前出现的值在哈希表中有没有出现过即可,然后把当前出现的值加入哈希表表示出现次数

posted @ 2024-04-28 17:52  仲裁45  阅读(19)  评论(0)    收藏  举报