当前位置: 首页 > news >正文

南充网站建设略奥科技content timeline wordpress

南充网站建设略奥科技,content timeline wordpress,外链网盘系统,wordpress侧边栏求两个数组的交集,直白点儿就是【nums2 的元素是否在 nums1 中】。 在一堆数中查找一个数,当然是扔出哈希。碰到这种对目前来说是未知数值大小的情况,我们可以使用集合 set 来解决。 使用数组来做哈希的题目,是因为题目都限制了数…

求两个数组的交集,直白点儿就是【nums2 的元素是否在 nums1 中】。

在一堆数中查找一个数,当然是扔出哈希。碰到这种对目前来说是未知数值大小的情况,我们可以使用集合 set 来解决。

使用数组来做哈希的题目,是因为题目都限制了数值的大小。

而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。

而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。

此时就要使用另一种结构体了,set ,关于set,C++ 给提供了如下三种可用的数据结构:

  • std::set
  • std::multiset
  • std::unordered_set

std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。

那有同学可能问了,遇到哈希问题我直接都用set不就得了,用什么数组啊。

直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。

不要小瞧 这个耗时,在数据量大的情况,差距是很明显的。

本来想直接将结果存入vector输出、但

如果 nums2 中有重复元素,结果 out 中也会包含重复元素。这是因为你在遍历 nums2 时,没有对已经找到的重复元素进行处理。

为了确保结果中不包含重复元素,可以使用 std::set 来存储结果,或者直接在插入结果时检查是否已经存在。

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {set<int> common(nums1.begin(), nums1.end());set<int> out;for(int i: nums2){if(common.find(i) != common.end()){out.insert(i);}}return vector<int>(out.begin(), out.end());}
};

同样可以使用unordered_set

或者

out.push_back(num);
common.erase(num); // 从 common 中移除,避免重复

力扣修改了题目有了数值范围、可以使用数组了。但如果使用数组、最后存储防止重复还是要使用一下set\多一个删除操作。

用unordered_map来实现

第一步,遍历数组 nums1,将出现的数作为key存进哈希表中,并将其value赋值为1。

因为【输出结果中的每个元素一定是唯一的】,所以对于 key 所对应的 value 来说“数值是多少”就无所谓了,所以在本题中,不管某个元素在数组中出现多少次,我把 value 都置为 1。

遍历 nums2 数组,nums2 数组中的元素如果出现在哈希表中,则证明是和 nums1 数组相交的元素,则加入结果列表中。并将哈希表中对应value赋值为0,防止重复加入。

class Solution{
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2){unordered_map<int, int> hash;vector<int> out;for(int i: nums1){if(hash.find(i) == hash.end()){hash[i] = 1;}}for(int i: nums2){if(hash.find(i) != hash.end() && hash[i] == 1){out.push_back(i);hash[i] = 0;//防止重复读取}}return out;}
};

http://www.dtcms.com/a/464406.html

相关文章:

  • flash做的网站企业logo设计网站
  • 做推广哪个网站最热门广州微网站建设信息
  • 都江堰市建设局网站本地的天津网站建设
  • app 微信 网站三合一网站开发还需要兼ie吗
  • 制作一个网站难吗佛山市住房与城乡建设局网站
  • 单网页网站如何做百度应用中心
  • 玉田县住房和城乡建设局网站深圳微信开发
  • 专门做推广的网站吗建筑工程网价是什么意思
  • 雷诺网站群建设知名网站建设定制
  • 做网站的域名怎么申请美宜佳企业网络营销推广方式
  • 贵州省城乡建设厅网站材料价重庆建筑特种作业查询网
  • 做网站做小程序推广企业网站建设模拟实验
  • 哪些网站用c 做的网站建设设计多少钱
  • iis7.5 配置网站上海网站建设报价单
  • 北京网站建设培训机构遵义网站开发哪家好
  • 怎么修改网站默认首页网站定制哪家比较好
  • 切片工具做网站怎么做18款禁用软件app破解版大全
  • 南阳哪有做网站公司建网站注意什么
  • 网站建设 设计提成工业信息化部网站备案系统
  • 凡科网站怎么关闭建设中如何推广自己的个人网站呢
  • it培训机构网站开发做软件的步骤
  • 网站备案时间怎么查询情感网站seo
  • 门户网站功能模块网络营销成功案例介绍
  • 深圳高端做网站公司html代码翻译器
  • 销售渠道建设网站太原要做网站的公司
  • 做外贸网站特色wordpress管理网址
  • 西安网站搜索引擎优化设计网站页面鉴赏技巧ppt
  • 时光轴网站模板学院网站怎么做的
  • 东莞市建设局网站6哪儿能做邯郸网站建设
  • 站长工具里查看的网站描述和关键词都不显示建设用地规划许可证在哪个网站查询