如何建立一个网站及app,学校做网站,中企动力做的网站好吗,seo优化自学题目解析
525. 连续数组 寻找一个子数组#xff0c;这个子数组中包含相同数目的0和1#xff0c;但是这个子数组需要最长的 算法讲解 只需在[0,i]寻找一段区间使得这一段区间的和也等于sum即可
细节问题#xff1a;1. 这里的哈希表的value存的是下标#xff0c;因为需要找…题目解析
525. 连续数组 寻找一个子数组这个子数组中包含相同数目的0和1但是这个子数组需要最长的 算法讲解 只需在[0,i]寻找一段区间使得这一段区间的和也等于sum即可
细节问题1. 这里的哈希表的value存的是下标因为需要找到最长的子数组的长度 2. 遇到重复的sum ,i,不用将当前的位置和sum更换进Hash因为在此时的[0,i]区间里已经寻找到了一段[0,j]区间的和也等于sum所以左边的长度越小就能找到结果
class Solution {
public:int findMaxLength(vectorint nums) {//将vector中的0 换成 -1//这道题将转化为 在数组中找出最长子数组使最长子数组中所有元素和等于0int sum 0;int ret 0;unordered_mapint,intHash;Hash[0] -1;for(int i 0; i nums.size(); i){sum nums[i] 0 ? -1 : 1;if(Hash.count(sum)){ret max(ret, i - Hash[sum]);}else Hash[sum] i;}return ret;}
};