Leetcode 310. Minimun Height Trees使用set快速删除元素
来源:互联网 发布:mac如何建立文件夹 编辑:程序博客网 时间:2024/05/22 15:57
set是C++STL中的一种集合类型,可以实现对元素的查找、添加、删除、修改。Set是一个集合,其中不能包含重复元素。删除set中的指定元素是一种很常见的操作,使用迭代器即可。例如:
void delete_set(set<int> &s,int m){ set<int>::iterator it; for(it=s.begin();it!=s.end();){ if( *it == m ){ s.erase(it); break; } }}
但是,这样的方式需要遍历整个集合,时间复杂度为O(n)。事实上,set的erase函数可以直接传入想要删除的元素作为参数,在O(1)时间内完成删除操作。例如:
set<int> s;s.insert(5);cout << s.size() << endl;//打印出1s.erase(5);cout << s.size() << endl;//打印出0
有关set的这个用法是本人在刷leetcode上的题310. Minimum Height Trees时搜到的。这里使用set保存图中每一个顶点的邻接点,在执行类拓扑排序的过程中可以很方便的实现删除顶点操作。之前使用vector一直报时间超时,换成set后直接通过。本题代码如下:
vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) { map<int,set<int>> graph; queue<int> q; vector<int> result; int *degree = new int[n]; for(int i=0;i < n; i++) degree[i]=0; if( n == 1){ result.push_back(0); return result; } int rest=n; for(int i=0;i < edges.size(); i++){ degree[edges[i].first]++; degree[edges[i].second]++; if( graph.find(edges[i].first) == graph.end()){ graph[edges[i].first] = set<int>(); } if( graph.find(edges[i].second) == graph.end()){ graph[edges[i].second] = set<int>(); } graph[edges[i].first].insert(edges[i].second); graph[edges[i].second].insert(edges[i].first); } for(int i=0;i < n; i++){ if( degree[i] == 1){ q.push(i); rest--; } } while( rest > 0 ){ queue<int> c; while( !q.empty() ){ int p=q.front(); q.pop(); auto it = graph[p].begin(); degree[*it]--; graph[*it].erase(p); if( degree[*it] == 1){ c.push(*it); rest--; } } q=c; } while( !q.empty()){ result.push_back(q.front()); q.pop(); } return result; }
这道题的思路和拓扑排序类似,依次处理度数为1的顶点并删除之,修改与被删除顶点邻接的顶点度数。反复执行以上过程直至剩余的顶点数量不超过2即所要获得的解。
0 0
- Leetcode 310. Minimun Height Trees使用set快速删除元素
- Leetcode 310. Minimum Height Trees
- [leetcode] 310. Minimum Height Trees
- 310. Minimum Height Trees LeetCode
- leetcode 310. Minimum Height Trees
- LeetCode *** 310. Minimum Height Trees
- 【LeetCode】310. Minimum Height Trees
- [leetcode] 310.Minimum Height Trees
- leetcode-310. Minimum Height Trees
- [leetcode] 310. Minimum Height Trees
- 【LeetCode】310. Minimum Height Trees
- LeetCode 310. Minimum Height Trees
- Leetcode 310. Minimum Height Trees
- [LeetCode]310. Minimum Height Trees
- Leetcode: 310.Minimum Height Trees
- 【Leetcode】310. Minimum Height Trees
- LeetCode 310. Minimum Height Trees
- leetcode-310. Minimum Height Trees
- java api文档的使用
- 机器学习常见算法分类汇总
- 带有指示器的自定义底部导航栏的实现
- Cross-Browser - The pageXOffset and pageYOffset
- centos6.7 安装 memcached
- Leetcode 310. Minimun Height Trees使用set快速删除元素
- linux syslog详解
- MBProgressHUD(0.9.1)
- Leetcode之Gas Station
- UVA 133(82)----The Dole Queue
- 02.C++学习笔记------const关键字
- android Services
- Xcode 如何修改类里面生成的Create By 和组织信息
- Number of Islands