MOOC浙大《数据结构》/ PTA-C语言 / 11-散列4 Hashing - Hard Version (30分)

根据给定的哈希表状态,使用线性探测解决冲突的方法,重建输入序列。当存在多种可能性时,选择最小的数字。题目提供了一种解决方案,通过维护degree来跟踪每个数在输入序列的位置,并通过拓扑排序确定顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

Given a hash table of size N, we can define a hash function H(x)=x%N. Suppose that the linear probing is used to solve collisions, we can easily obtain the status of the hash table with a given sequence of input numbers.

However, now you are asked to solve the reversed problem: reconstruct the input sequence from the given status of the hash table. Whenever there are multiple choices, the smallest number is always taken.

Input Specification:

Each input file contains one test case. For each test case, the first line contains a positive integer N (≤1000), which is the size of the hash table. The next line contains N integers, separated by a space. A negative integer represents an empty cell in the hash table. It is guaranteed that all the non-negative integers are distinct in the table.

Output Specification:

For each test case, print a line that contains the input sequence, with the numbers separated by a space. Notice that there must be no extra space at the end of each line.

Sample Input:

11
33 1 13 12 34 38 27 22 32 -1 21

Sample Output:

1 13 12 21 33 34 38 27 22 32

思路

看了陈越老师的思路是用拓扑排序做,奈何刚开始学,还没复习过什么都不熟悉,想着用自己的方法做一做,提交ac了而且貌似效率还不错的样子,所以试着写下自己的第一篇Blog。

思路是degree保存其当前地址减去哈希地址为排在其前面输入哈希表的数的数目,并复制存入cmpdegree以便比较,当其前驱值确定并输出(先放入a[n]数组)后,其degree减1。当degree为-1时表示此值已经确定了在输入序列的位置不用再进行比较。当最后degree都为-1即表示所有哈希表中的值都已确定的输入次序,此时顺序输出a[k]即可,其中为-1的值代表原本哈希表中的空位。

代码

#include <stdio.h>
int main() {
   
    int n;
    scanf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值