05 2023 档案
摘要:满足相似的条件:1.长度一样 2.组成的字母组合相同 3.每个组成字母的个数集合相同 比较两个vector,直接用==/!= 排序vector sort(迭代器1,迭代器2); 初始化vector形式:vector<类型>name(形式) if(word1.lenth()!=word2.length
阅读全文
摘要:哈希表初始化有unordered_map<int,int>map或map<int,int>m 他们都是不存储重复的键 map[key]=value Vector::count(): count(v.begin(),v.end(),target)
阅读全文
摘要:哈希列表存储的是不重复的元素,使用两个哈希列表存储这两个数组。再遍历其中一个哈希列表,查看是否存在另一个哈希列表中 set.insert() set1.count(元素) for(int num:nums1){ set1.insert(num); } for(int num:set1){ if(!s
阅读全文
摘要:使用数学方法: 假设左边的所有数加起来的和是sum,total为数组所有元素加起来的和,当i满足中心下标的条件时,即: sum=total-sum-nums[i]; 2*sum+nums[i]=total; 当中心下标是首位时,即左边sum为0;当中心下标是尾位时,右边total-sum-nums[
阅读全文
摘要:递归: 1.记pre[i]为以i位置结尾的连续1长度。 pre[i]=0;ai=0 pre[i]=pre[i-1]+1;ai=1 记suf[i]为以位置i开头的连续1长度; suf[i]=0;ai=0 suf[i]=suf[i+1]+1;ai=1 计算删掉i位置的连续1的长度为pre[i-1]+su
阅读全文
摘要:1.二分查找法 用一数组P【i】记录每个位置之前到自己本身位置i有多少个0,只要满足【left,ridht】之间的0个数小于等于k就可以连接成为连续的1。 即P【上界】-P【下界】<=k,枚举right,则要找到最小left就能够找到最长的连续1,P[right]-k<=P[left],则最小的le
阅读全文
摘要:lower_bound(下界,上界,目标值)找到不小于目标值的位置,即大于等于 while(left<right){ int mid=left+(right-left)/2;//查找区间[left,right) if(target<nums[mid]){ left=mid+1; }else{ rig
阅读全文
摘要:C99:int数字_t,t表示它是取另一个名字,不是新的数据类型 uint数字_t表示无符号,编译器把这种数据类型看成数字。 数字是指单位长度有多少bit 1.string转vector<char> 用assign string与数字转化 string s=“helllo word!” vector
阅读全文
摘要:滑动窗口: 利用一个变量记录nums[k-1]之后位置的k长度子数组的总和,再用一个变量记录最大值,与最大就调换。 起初开辟的是一个vector容器去存,改为用一个变量最好 for(int i=0;i<k;i++){ sum+=nums[i]; } for(int i=k;i<n;i++){ sum
阅读全文
摘要:1.排序双指针 先排序 sort(nums.begin(),nums.end()); 在双指针查找 while(left<right){ if(nums[left]+nums[right]<k){ left++; }else if(nums[left]+nums[right]>k){ right--
阅读全文
摘要:本题最关键的一点是移动的是短板,不停向内移动短板才可能将面积变大。 int i=0,j=height.size(); while(i<j){ area=height[i] < height[j]? max(area,(j-i)*height[i++]): max(area,(j-i)*height[
阅读全文
摘要:1.初始化动态数组,加边界,所有从t超界的位置找一个字母一定是找不到的,所以设为边界值即代表无穷大。 2.预处理:因为如果t现在位置找不到所找字母则从t后一位开始找,所以 f[i][j]=f[i+1][j]//同时从后往前更新数组(t[i]!=j)f[i][j]=i//t[i]==j 3.按s的字母
阅读全文
摘要:238: 最新置换的位置后面应该都是0 for(int i=0;i<n;i++){ if(nums[i]!=0){ nums[i]与nums[j]交换位置,并移动j指针一格,因为最新置换的位置后面否应该是0}}
阅读全文