ARTS挑战第三周

Algorithm

  • 959. 由斜杠划分区域 使用并查集,不断加边,判断是否产生环,每产生一个,res++需要先对所有的顶点编号,然后根据grid[i][j]的值来生成对应的edge,并判断join是否成功,失败的话就说明产生了环; (后面讲的自己画个图) 顶点编号:N*N的网格,编号是1~(N+1)^2,最初 所有直角边上的点 属于一个图。如果grid[i][j] 所在方格的四个顶点编号,从左上顶点顺时针:i*(N+1)+j+1, i*(N+1)+j+2, (i+1)*(N+1)+j+2,(i+1)*(N+1)+j+1 因此 如果grid[i][j] = '/',则产生的边为 i*(N+1)+j+2, (i+1)*(N+1)+j+1grid[i][j] = '\' , 产生的边为i*(N+1)+j+1,(i+1)*(N+1)+j+2

  • 1584. 连接所有点的最小费用 最小生成树算法,Kruskal算法和prim算法均可解,这里练习kruskal , 1. 先将所有点放入vector中,只保留指针 2. 先枚举所有不重复的边形成vector。3. 将边按照从小到大顺序排列。4.遍历所有边,如果边中的两个点不属于同一个连通图,则加入边集合。 kruskal算法效率没优化是很低的,这个由于是稠密图,比较适合prim算法。顺便说下prim+堆实现的算法:1. 先将所有点放入vector中,只保留指针 2. 枚举所有边,这里需要构建邻接表,由于是二维的点,使用map<point* ,edge *>存储下。3. 任意选择一个起点,将其加入新图中,这里只需要标记为访问过就可以。加入过程中,将该点能到达的边加入堆中。4. 从堆中选择最短边,并且其中有一端不在新图中,则将这个点以及对应的边加入新图。

  • 645. 错误的集合 类似 448. 找到所有数组中消失的数字 ,将所有元素交换到它应该在的下标位置,最后有些下标放的值不等于index+1,则index+1就是缺失的。而num[index]就是重复的。

  • 382. 链表随机节点 398. 随机数索引 均是水塘抽样法中,k=1的情况去解。水塘抽样法请参考我写的这篇文章

Review

What-is-the-major-difference-between-the-buffer-cache-and-the-page-cache buffer cache与page cache有什么区别,buffer cache主要是用于磁盘的block IO,page cache是文件IO,本来这两个cache是独立的,这样数据可能被cache两次。在linux kernel2.4 以后,buffer cache指向了page cache(如果数据已经有page cache的话)。

Tips

  1. linux vim 粘贴代码会出现持续缩进,解决办法:
    粘贴前使用 : set paste ,然后再粘贴
    粘贴后使用 : set nopaste 取消

Share

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值