July博客第十二章参考学习

### July博客第十二章参考学习

## 第一题:给40亿个不重复的unsigned int 的整数,无序,给一个随机数,快速判断这个是否在40亿个数当中

1. 个人思路:

    - bitmap,重点在于不重复

    - hash , 无法使用hash

2. July 答案:

    - bitmap, 使用 unsigned int 作为表示 32个数是否存在,需要 40亿/32 个这样的unsigned int 换算下来在C++中需要512M

3. 拓展:当数据超出可接受范围之后

    - 基本概念:LZW(Lenpel-Ziv &Welch) , 对原始数据:ABCCAABCDDAACCDB进行LZE压缩,0-A,2-B,3-C,3-D,4-AB,5-   CC,可以实现压缩 45A4CDDAA5DB。

    - 适用范围:原始数据串最好是大量的子串多次重复出现,重复的越多,压缩效果越好。反之越差。

    - 揭示原理:算法本身,是为了解决时间和空间均衡问题,要么时间换空间,要么空间换时间。


## 第二题:遍历n个元素取出等概率随机取出其中之一元素

1. 个人思路:

    - 遍历每个元素的时候用当前的系统时间作种子,生成随机数,最后遍历一次随机数最大或者最少的作为选择条件。

        - 面对问题:如果两个随机数相同怎么办?虽然概率很少但是还是可能出现。

2. BigPotato答案:

    - RandomPick


## 第三题:提取出某日访问百度次数最多的那个IP,IP总数量不超过 40 亿次。

1. 个人思路:

    - 无

2. luuillu答案:

    - 考虑IP 32位,不超过40亿次的IP 最少占内存16G,将IP地址的前5位作为区间编号,剩下的27作为区间内的值,建立32个临时文件,把相同区间IP地址保存到同一的临时文件中。统计IP出现次数,找到访问次数最大的IP地址。


## 第四部分:回文判断

    # 第一问:判断一个字符是否回文

    1. 个人思路:

        - 无

    2. July答案一(使用数组):

        - 字符串逆旋,存入另一个字符串,和原来的字符串对比

        - 两头扫描,直到遇到两端字符都是同一个字符,结束。

        - 从中间开始,向两头扫描。

    3. July答案二(使用栈):

        - 依次入栈,依次出栈,得到逆置串,和原字符串比较。

    4. July答案三(使用单链表):

        - 最大难点:单链表单向,快慢指针定位到中间,后半部分逆置(如何实现单链表逆置?又是一个疑问),两指针从中间和开头开始遍历。

    # 第二部分,回文的应用:查找一个字符串中的最长回文字串

    1. 个人思路:

        - 无

    2. July答案一:

        - 枚举所有的子串,分别判断其是否为回文

        - 

    3. 无心情继续看,回文的最后部分未能完成。今日学习毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值