96SEO 2026-02-19 12:15 9
2、哈希表作用#xff1a;存储数据的容器#xff0c;插入、删除、搜索的时间复杂度都是O#xff08;1#xff09;#xff0c;无序。

1、哈希表底层通过对C的学习我们知道STL中哈希表底层是用的链地址法封装的开散列。
2、哈希表作用存储数据的容器插入、删除、搜索的时间复杂度都是O1无序。
2数组模拟简易哈希表减小时间损耗容器的封装有一定代价—大多以下两种情况适用
xtarget-nums[i];if(hash.count(x))
{hash[x],i};hash[nums[i]]i;}return
hash[ch-a];//检测第二个数组for(charch:s2)
//有负数所以必须用库里面的哈希表for(autoe:nums)
containsNearbyDuplicate(vectorint
i0;in;i){//如果哈希表中有这个数if(hash.count(nums[i])i-hash[nums[i]]k)
true;hash[nums[i]]i;//存下标的映射}return
containsNearbyDuplicate(vectorint
{//滑动窗口解题让set始终保存着k个元素如果发现了区间内有重复元素那么就可以返回trueunordered_setint
true;s.emplace(nums[i]);//不断将数字丢进去if(ik)
public://绝对值尽量拆解掉//滑动窗口解决问题控制区间
containsNearbyAlmostDuplicate(vectorint
its.lower_bound((long)nums[i]-t);if(it!s.end()*it(long)nums[i]t)
因为这个思路来源写得非常的详细所以直接看就行以往我们的分桶更多的是针对整数的分桶但是在该题中扩展了存在负数的时候如何分桶保证每个桶内的元素个数是一样的。
这是一种非常巧妙的方法要结合具体的实例去看
核心思路保证每个桶内的绝对值相差小于tk个桶。
当我们遍历到这个数的时候如果对应的桶的存在就是true如果相邻桶存在看看差值是否符合要求。
每个桶中只会有一个元素因为有多的我们就会直接返回结果。
containsNearbyAlmostDuplicate(vectorint
-保证一个桶里面是符合的unordered_mapint,int
//找编号//看看当前桶存不存在if(hash.count(id))
hash.count(id-1)u-hash[id-1]t||hash.count(id1)hash[id1]-ut)
hash.erase(getid(nums[i-k],t));//桶数多了就去掉一个hash[id]u;//开新的桶}return
{//字母异位词-排序后都是相同的unordered_mapstring,vectorstring
//将异位词绑定起来for(autos:strs){string
temps;sort(temp.begin(),temp.end());hash[temp].emplace_back(s);}//提取出来vectorvectorstring
//取哈希表中键值对的方法C14支持//for(autokv:hash)
ret.push_back(kv.second);return
会按照字典序排好而我们现在要按照出现次序去排序同时对于出现次数相同的保证字典序在前面所以我们其中之一的策略就是vectorsort
,但是sort底层是快排并不具备稳定性但是库里面有一个stable_sort是稳定的排序
countmap[s];//此时已经按照字典序排好了将其拷贝到vector中vectorPSI
nums(countmap.begin(),countmap.end());//要用一个稳定的排序
我们排序的是比较value所以要修改比较逻辑stable_sort(nums.begin(),nums.end(),[](const
kv1.secondkv2.second;});vectorstring
解法2unordered_mapvectorsort调整比较逻辑lambda优化
countmap[s];//此时已经按照字典序排好了将其拷贝到vector中vectorPSI
nums(countmap.begin(),countmap.end());//要用一个稳定的排序
我们排序的是比较value所以要修改比较逻辑sort(nums.begin(),nums.end(),[](const
kv1.secondkv2.second||(kv1.secondkv2.secondkv1.firstkv2.first);});vectorstring
解法3unordered_mappriority_queuecompare类
compare//要注意仿函数要const修饰否则可能编译不过{bool
kv1.secondkv2.second;}};vectorstring
countmap[s];//丢到优先级队列里priority_queuePSI,vectorPSI,compare
{ret[i]heap.top().first;heap.pop();}return
解法4unordered_mapmultisetcompare类
compare//要注意仿函数要const修饰否则可能编译不过{bool
kv1.secondkv2.second||(kv1.secondkv2.secondkv1.firstkv2.first);}};vectorstring
countmap[s];multisetPSI,compare
sortmap(countmap.begin(),countmap.end());vectorstring
ret(k);multisetPSI,compare::iterator
这题能过的原因是map实现了字典序的排序。
而底层的multimap封装中对于相同的键值是优先插入到其右侧。
compare//要注意仿函数要const修饰否则可能编译不过{bool
countmap[s];multimapint,string,compare
sortmap.insert(make_pair(kv.second,kv.first));vectorstring
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback