09-散列3. Hashing - Hard Version (30)
来源:互联网 发布:等高线地图软件 编辑:程序博客网 时间:2024/05/22 10:56
题目:http://www.patest.cn/contests/mooc-ds/09-%E6%95%A3%E5%88%973
题目的意思给你一个通过线性探测法生成Hash表,求出它的输入顺序并且要最小序列,散列函数x% N。
先看下图
解:
import java.math.BigInteger;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.HashSet;import java.util.Hashtable;import java.util.LinkedList;import java.util.Map.Entry;import java.util.PriorityQueue;import java.util.Scanner;import java.util.Set;import java.util.TreeMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.locks.ReentrantLock;/** * @author chenhong * */class Node implements Comparable<Node>{int value; int index;ArrayList<Node> from =null;//入度ArrayList<Node> to = null ;//出度public Node(int value,int index){this.value=value;this.index=index;from = new ArrayList<Node>();to = new ArrayList<Node>();}@Overridepublic int compareTo(Node o) {// TODO Auto-generated method stubreturn this.value-o.value;}}public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt();ArrayList<Node> input = new ArrayList<Node>(); //输入序列for(int i=0;i<N;i++){int value= scanner.nextInt();Node node = new Node(value,i);input.add(node);}//初始化入度和出度for(int i=0;i<N;i++){Node node = input.get(i);int value = node.value;if(value<0) continue;int key_N = value%N; // key%Nint to = (i-key_N+N)%N ;//冲突 = (下标 - Key % N + N) % N for(int j=0; j<to ;j++){int index = (key_N+j)%N;Node n = input.get(index);n.to.add(node);node.from.add(n);}}PriorityQueue<Node> output = new PriorityQueue<Node>();//找到入度为0的点for(int i=0;i<N;i++){Node node = input.get(i);if(node.from.size()==0)output.add(node);}StringBuilder sb = new StringBuilder();while(!output.isEmpty()){Node n = output.poll();if(n.value<0) continue;sb.append(n.value+" ");int index = n.index;ArrayList<Node> to = n.to;ArrayList<Node> from = n.from;//修改入度for(Node i: to){i.from.remove(n);if(i.from.size()==0)output.add(i);}}if(sb.length()>0)System.out.println(sb.substring(0, sb.length()-1));}}
0 0
- PAT 09-散列3. Hashing - Hard Version (30)
- 09-散列3. Hashing - Hard Version (30)
- 09-散列3. Hashing - Hard Version (30)
- PAT 数据结构 09-散列3. Hashing - Hard Version (30) 拓扑排序
- 11-散列4 Hashing - Hard Version
- 09-3. Hashing - Hard Version
- PTA—11-散列4 Hashing - Hard Version (30分)
- PAT--Hashing - Hard Version (30)
- [DS][Hash][PAT][Hashing Hard Version]
- hashing(hard)
- 09-散列1. Hashing (25)
- 散列 (Hashing)
- 散列(hashing)
- 散列2 Hashing
- 11-散列2 Hashing
- 数据结构:散列(hashing)
- 散列-PAT.A1078 Hashing
- 11-散列4 Hashing
- Mysql实现自增长编号,日期+序列,序列定时归零
- BestCoder 1st Anniversary ——HDU5312(数学推导)
- 上传图片方向角度问题
- 存储设备类型图
- spring task 注解+xml的demo
- 09-散列3. Hashing - Hard Version (30)
- C++中的四种cast
- RHEL二十(管理SELINUX的安全性)
- Nginx配置文件详细说明
- 从零开始搭建SpringMVC框架以及最简单的 Hello World 实例
- android 收集已发布版本的错误信息(UncaughtExceptionHandler)
- KMP算法专题-1001
- Snail—UI学习之表视图TableView单行添加、删除和移动
- ios实现简单的计算器