hello大家好!今天给大家带来的是最近做的一道题,题目如下:
一、题目
二、答案
下面是我的答案,刚开始用的暴力循环,结果超时了... 后面又想到了前缀和,我把前缀和用vector村了起来,但是死活没想到用哈希表!!!结果还是超时🥲
但是我已经把核心公式推出来了,只能说是太可惜了🥲!!!下面蓝色的就是核心公式,过程比较潦草哈😂
hash.find(sum - k) != hash.end()
下面是我的答案:
三、为什么要hash[0] = 1;
实话说,这个问题确实困扰了我好久,但是其实很简单,因为unordered_map<int, int> hash本质上保存的就是前缀和出现的次数,那么就可以恍然大悟了,hash[0] = 1,不就是前缀和为0的次数吗?有的小伙伴是不是还有点点懵呢?嘿嘿,本身初始化了这个容器后前缀和就应该是0,因为容器初始状态,前缀和只能是0
举个例子:
如果说hash[1] = 1 ,那么意思就是 前缀和为1的元素出现过一次,那么hash[0] = 1,不就说明了初始状态嘛,前缀和没有添加元素,所以肯定是为0出现过一次