一道算法题——合并有交集的集合
题目如下,
给定一个字符串的集合,格式如:
{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}
要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应
输出
{aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)请描述你解决这个问题的思路;
(2)请给出主要的处理流程,算法,以及算法的复杂度
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。
我查了查网上的解法,只看到一个(参见http://blog.csdn.net/lillllllll/article/details/4162605),我有一点新想法,说明如下:
1. 首先得到所有元素的集合(aaa, bbb, ccc, ddd, eee, fff, ggg, hhh),复杂度O(N),N是所有元素的个数;
2. 为所有集合标记一个二进制数,来表示包含哪些集合,得到数组int bina[5]复杂度O(N^2);
如题,{aaa, bbb, ccc} = 1 1 1 0 0 0 0 0,
{bbb, ddd} = 0 1 0 1 0 0 0 0,
{eee, fff} = 0 0 0 0 1 1 0 0,
{ggg} = 0 0 0 0 0 0 1 0,
{ddd, hhh} = 0 0 0 1 0 0 0 1,
3. 然后写一个函数,判断int数组中的第一个元素是否与其他元素&操作为空,复杂度为O(M),M是原集合的个数
a. 为空则输出该元素对应的集合,并删除第一个元素,递归调用本方法;
b. 不为空则与那个元素做或操作合并,删除那个元素,递归调用本方法;
c. 如果只剩下一个元素则输出其对应的字符串;
4. 所有的结合已经得到了。
从上面的复杂度看,应该是比原来网上的方法好一些,欢迎大家踊跃拍砖!
一道算法题——合并有交集的集合相关推荐
- 一天一道算法题--5.30---递归
感谢微信平台: 一天一道算法题 --------每天多一点进步--------- 今天 休假 这题 也很水 能发现 规律就好 明天 再也不能这样了 forgive me ---------- 转载于 ...
- 一天一道算法题--6.15--卡特兰数
感谢微信平台---一天一道算法题---每天多一点进步- problem: 12个高矮不同的人 排成两排 每排必须是从矮到高排列 而且第二行比对应的第一排的人高 问排列方式有多少种? analyse: ...
- 一道算法题跟大家分享
无意中看到一道算法题,拿出我的解法与大家分享. 题目:输出1,2,3,4四个数字能组成的互不相同且无重复的三位数并统计满足条件的三位数个数 大家先想想,再看答案吧. View Code 1 /// & ...
- 每天一道算法题系列十七之电话号码的字母组合
每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-numb ...
- 搜狗2020秋招笔试的一道算法题
搜狗2020秋招的一道算法题 有A,B,C三种样品,凑齐三个样品各一个就可以领取一个奖品.任意两个样品可兑换另一种样品,如AA可兑换一个B或一个C,AB可兑换一个C.输入ABC,问最多可以领取多少奖品 ...
- 每天一道算法题系列十二之整数转罗马数字
每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/integer-to-roman/ 来源是力扣,大家喜欢可以去力扣中文 ...
- 截止目前为止,我遇到的最难的一道算法题:计算相邻两个数的最大差值
hello,今天给大家带来一道算法题.这道算法题,是我目前为止,见过最难的一道题.那么到底是怎样的一道算法题呢?如下: 题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值. 要求时间复杂度O( ...
- Homebrew作者面试Google被拒,只因写不出一道算法题
相信很多人听说过关于Max Howell(Homebrew的作者)的故事: Max Howell在Google面试,但Google拒绝了他,给出的答复是:"虽然我们90%的工程师都用你写的软 ...
- 最佳买卖股票时间 Java_一道算法题的讲解-买卖股票的最佳时间
今天讲解一道简单的算法题: 问题描述 假设我们有一个数组, 数组中按顺序每个元素的值表示当天的股票价格. 例如,数组: [7,1,5] 表示股票第一天是7元,第二天是1元,第三天是5元 约定,只能买一 ...
最新文章
- docker报错:Unable to get pid of LinuxThreads manager thread及openjdk-alpine镜像无法打印线程堆栈和内存堆栈问题
- 一轮项目冲刺——移山小分队(6)
- 大牛深入讲解!最经典的HashMap图文详解
- 机器学习算法总结--EM算法
- python实时绘图暂停_Python实时绘图
- 前端开发 —— google chart 的使用
- 《文献管理与信息分析》速看提问
- xmind各版本区别_XMind各版本功能对比1.PDF
- Java中的【锁】事 - 极客大学架构师训练营 架构师 Albert 分享
- java IO流分类
- 使用超临界二氧化碳的晶圆清洗技术
- android speex 音频采样率,speex进行音频去噪
- Order by 语句 的使用
- emplace_back不能取代push_back的情况
- 设计一个程序,帮助小学生练习10以内的加法题目
- 龙测独家AI全新功能上线,手机无感录制,AI自动生成测试用例
- MoviePy - 中文文档4-MoviePy实战案例-重新构建15世纪舞蹈视频
- ${} 与 #{} 区别
- Problem D: 四阶多项式
- 【翻译】硅谷创业教父保罗·格雷厄姆:做不可拓展的事 Do things that don't scale...