hash的简单使用<找数字>
2016-12-12 09:52
337 查看
thinking:1、用一个数组存储出现过的数字,刚开下下标为1(可以思考为什么下标刚开始不能为0)。
2、相同数对一个数取mod的值是固定的,通过这么mod出来的值作为关键字去查找是否存在。
如先插入6 15 20 15,6 mod 7= 6,然后通过6查找之前是否有mod 后结果是 6 的数,没有,则把其下标也就是1 作为 head[6]
然后插入15 通过 15 mod 7 = 6 ,然后通过6查找之前是否有mod 后结果是 6 的 数,存在,则u为其下标,判断这两个同mod 7 结果为6的数是否相等,
如果不想等,u=next[u],也就是找前一个mod 7 结果为6的数来判新加入的数是否与之前的数重复,此时u=next[u]的结果为0,则不存在,添入,
把下标为2作为head[6]。
然后到插入20 20 mod 7 =6 ,然后通过找到 head[6] 的下标也就是 2 然后判断这两个数是否相等,然后不想等找next[6]也就是15 判断仍然不想等,则又下一个u=next[u],
20 不等于6 则把20插入,然后到15 15 mod 7 = 6 u=head[6] 判断15不等于20 则找下一个 u=next[u] , 此时15=15 返回值为0,也就是不能添加。
开始下标不能为0的原因是,如果为0了,下一个与其相同的值找到的下标是0,则不经过while循环直接插入
思考为什么next[s]=head[u] 而不是next[s]=u;
2、相同数对一个数取mod的值是固定的,通过这么mod出来的值作为关键字去查找是否存在。
如先插入6 15 20 15,6 mod 7= 6,然后通过6查找之前是否有mod 后结果是 6 的数,没有,则把其下标也就是1 作为 head[6]
然后插入15 通过 15 mod 7 = 6 ,然后通过6查找之前是否有mod 后结果是 6 的 数,存在,则u为其下标,判断这两个同mod 7 结果为6的数是否相等,
如果不想等,u=next[u],也就是找前一个mod 7 结果为6的数来判新加入的数是否与之前的数重复,此时u=next[u]的结果为0,则不存在,添入,
把下标为2作为head[6]。
然后到插入20 20 mod 7 =6 ,然后通过找到 head[6] 的下标也就是 2 然后判断这两个数是否相等,然后不想等找next[6]也就是15 判断仍然不想等,则又下一个u=next[u],
20 不等于6 则把20插入,然后到15 15 mod 7 = 6 u=head[6] 判断15不等于20 则找下一个 u=next[u] , 此时15=15 返回值为0,也就是不能添加。
#include <iostream> using namespace std; int head[500]; int next[500]; int st[500]; int aa; int insert(int s){ int h=aa%7; int u=head[h]; while(u){ if(st[u]==st[s])return 0; u=next[u]; }
next[s]=head[h];
head[h]=s;
return 1; } int main(){ int g=1; while(cin >> aa){ st[g]=aa; if(insert(g)){ g++; cout << "插入成功" << endl; }else{ cout << "插入失败" << endl; } } }
开始下标不能为0的原因是,如果为0了,下一个与其相同的值找到的下标是0,则不经过while循环直接插入
思考为什么next[s]=head[u] 而不是next[s]=u;
相关文章推荐
- 如何使用CSS设置<input>标签的背景小图标 简单
- Solr 数据导入 <一>DIH简单使用
- Java中,使用HashSet<E>类
- 基于.NET的分词软件设计与实现V5.0--使用Hashtable和HashSet<T>提高分词效率
- JavaScript中list的简单使用<菜单>
- <copy>Log4j日志管理系统简单使用说明
- SlidingPaneLayout,DrawerLayout,ActionBar,NavigationView 详解 <二>SlidingPaneLayout 的 简单的使用
- <swift学习之路> UIAlertController的简单使用
- CoreData的简单使用<三、CoreData分页查询和模糊查询>
- CoreData的简单使用<四、多个数据库>
- Solr 数据导入 <一>DIH简单使用
- JSTL中<c:import />标签的简单使用-以和Spring MVC搭配为例
- map<int,int>函数的简单使用
- iOS<MapKit/MapKit.h> MKMapView的简单使用
- 关于delegate的简单使用说明<转载两篇>
- Android Netroid框架介绍及使用,又一简单粗暴的网络框架!<Garry进阶(二)>
- 最简单的struts2中使用<s:iterator>实现隔行变色代码[珍藏版]
- HTML中<div>标签的一个简单的使用和介绍
- GCD的简单使用<二>
- HTML5新增标签<audio>简单的使用