算法
yptsqc
有趣的灵魂百十斤。
展开
-
bitmap算法思想
Bit-map的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面可以大大节省。假设这样一个需求:在20亿个不重复的随机整数进行排序,并假设32位操作系统,4G内存先看占用内存在Java中,int占4字节,1字节=8位(1 byte = 8 bit)如果每个数字用int存储,那就是20亿个int,因而占用的空间约为 (2000000000*4/1024/1024/1024)≈7.45G如果按位存储就不一样了,20亿个原创 2020-08-01 15:56:52 · 321 阅读 · 0 评论 -
C++ STL的容器
1.顺序容器:vector:可变大小数组;deque:双端队列;list:双向链表;forward_list:单向链表;array:固定大小数组; c++11string:与vector相似的容器,但专门用于保存字符。2.关联容器按关键字有序保存元素:(底层实现为红黑树)map:关联数组;保存关键字-值对;set:关键字即值,即只保存关键字的容器;multimap:关键字可重复的map;multiset:关键字可重复的set;3.无序容器: c++11unordered_map:原创 2020-07-21 09:36:04 · 152 阅读 · 0 评论 -
C++ vector底层数据结构
vector其底层数据结构是数组,由于数组的特点,vector也具有以下特性:1、O(1)时间的快速访问;2、顺序存储,所以插入到非尾结点位置所需时间复杂度为O(n),删除也一样;3、扩容规则:当我们新建一个vector的时候,会首先分配给他一片连续的内存空间,如std::vector vec,当通过push_back向其中增加元素时,如果初始分配空间已满,就会引起vector扩容,其扩容规则在gcc下以2倍方式完成:首先重新申请一个2倍大的内存空间;然后将原空间的内容拷贝过来;最后将原空间原创 2020-07-17 10:00:01 · 3320 阅读 · 0 评论 -
C++ unordered_map实现方案,与hash冲突解决办法
unordered_map有点类似c++11之前的非标准库hash_map, c++11后, 加入了unordered_map, 可就用来代替之前的hash_map。今天来看看unordered_map的底层实现。END原创 2020-07-17 09:57:59 · 9868 阅读 · 3 评论 -
c++ 中的RAII
什么是RAII?先看看书面的解释:RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全、简洁的状态管理,编写出优雅的异常安全的代码。RAII是Resource Acquisition Is Initialization, 翻译过来就是“资源获取即初始化”,是不是比较难明白。 接着看。RAII是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访原创 2020-07-16 21:26:27 · 242 阅读 · 0 评论 -
单向链表上的环
单向链表上的环有如下三种情况:1:没有环2:头尾相接3:尾部next指向了中间任意节点一般的做法是采用快慢指针。 即初始快慢节点指针都指向head, pSnow = pSnow->next;pFast = pFast->next->next;当if(pSnow == pFast) 即表示有环代码实现如下:xx* pSnow = head;xx* pFast = head;while(pFast) {pSnow = pSnow->next;pFast原创 2020-07-14 19:00:51 · 220 阅读 · 0 评论 -
完美数
/*完美数,如果一个数恰好等于它的因子之和,则称该数为“完全数” [1] 。 * 各个小于它的约数(真约数,列出某数的约数,去掉该数本身,剩下的就是它 * 的真约数)的和等于它本身的自然数叫做完全数(Perfect number),又称完美数或完备数。*/ void FindWanMeiNum(int n) { int tmpSum = 0; for(int i ...原创 2018-09-11 22:18:04 · 410 阅读 · 0 评论 -
五角星数
/五角星数是指五位数各位上的数字的5次方之和等于本身的数 10000 - 99999/ void FindWuJiaoXingNum() { int a,b,c,d,e; a = b = c = d = e = 0; for(int i = 10000; i <= 99999; i++) { a = i % 10; ...原创 2018-09-11 21:40:54 · 6940 阅读 · 0 评论 -
四叶玫瑰数
/四叶玫瑰数是指四位数各位上的数字的四次方之和等于本身的数 1000 - 9999/ void FindSiYeMeiGuiNum() { int a,b,c,d; a = b = c = d = 0; for(int i = 1000; i <= 9999; i++) { a = i % 10; b = (i ...原创 2018-09-11 18:38:16 · 8113 阅读 · 0 评论 -
水仙花数
/水仙花数:是指一个三位数,每个位上的数字的 3次幂之和等于它本身 100 - 999/ void FindShuiXianHuaNum() { int a,b,c; a = b = c = 0; for(int i = 100; i <= 999; i++) { a = i % 10; b = (i / 10)...原创 2018-09-11 18:33:09 · 2705 阅读 · 0 评论