11.6学习笔记

小知识点

1.map和unordered_map的区别

1.1 内部实现机理

  • map:map内部实现了一个红黑树,该结构具有自动排序的功能,所以map内部是有序的。
  • unordered_map:内部实现了一个哈希表,顾名思义也知道是无序的。

1.2 优缺点以及适用场合

  • map

优点:

(1)有序性。

(2)红黑树结构。效率比较高,很多操作都可以在logn的时间复杂度下实现。

缺点

空间占用率高。红黑树虽然提高了运行效率,但是每一个节点都需要额外保存父节点、孩子节点以及红/黑性质,使得每一个节点都需要占用大量空间。

**适用场合:**对于有顺序要求的问题,map更加高效。

  • unordered_map

**优点:**由于内部实现为哈希表,所以查找速度非常快。

**缺点:**哈希表建立比较耗费时间。

**适用场合:**对于查找问题,更加高效。

2.基于范围的for循环

vector<int> res{1,2,3};
for(auto n : res)
    cout<<n;

这里的for循环等价于:

for(vecotr<int>::iterator iter = res.begin(); iter != res.end(); res++)
    cout<<*iter;

不过前一个遍历是只读的,不能修改遍历的值。如果要修改的话,需要将遍历的变量声明为引用类型。比如:

for(auto &n : res)
    n++;

3.vector初始化

(1)vector res;

(2)vector res(res1);

等价于:vector res = res1;

(3)vector res = {1,2,3};

等价于:vector res{1,2,3};

如果列表中元素与初始定义的元素不一样会进行强制类型转换。

(4)vector res(res1.begin()+1, res1.end()-1);

(5)vector res(5);

res将包含5个元素,每个元素进行默认值初始化,对于int初始化为0。

(6)vector res(5,3);

res被初始化为包含5个值为3的向量。

4. using关键词

using value_t = pair<int, int>;

指定别名。

5.Lambar表达式

Lambar表达式把函数看作对象,Lambar表达式可以像对象一样使用,比如可以赋给变量和作为参数传递,还可以像函数一样对其求值。

8.TopK问题

8.1

比如找出10亿个数中最小的一百个。

要利用分布式思想处理海量数据。一台机器不可能跑完所有的数据,可以把数据分散在多台机器中,然后每台机器并行计算各自的TopK数据,最后汇总再计算得到最终的TopK数据。

对于每个机器分散的数据排序,利用堆。维护一个大小为K的大顶堆。最开始依次把数据放入堆中,当堆的大小满的时候,只需要将堆顶元素与下一个数比较:如果小于堆顶元素则将当前堆顶元素抛弃,并将该元素插入堆中。遍历完所有的数据即可得到TopK数据。

对于复杂度,遍历数组需要O(n),一次堆化操作需要O(logK),总共需要O(nlogK)的复杂度,一般K远小于n,所以O(nlogK)接近于O(n)。

9 为什么内存分配要用到栈这个数据结构

栈一般存储的是函数的调用信息的函数中申明的变量,因为函数的调用是递归的,外层函数一定比内层被调用的函数先加载和执行,等到内层被调用函数结束后才能结束,即需要先进后出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值