浙大数据结构:11-散列4 Hashing - Hard Version
这道题主要在于思路,感觉像个模拟题,用到了线性探测的算法
机翻

1、条件准备
visit数组看这个位置有没有放进来数,num存非负整数,s存未到放入时机的数。
answer存答案。n为总共数量。
#include <iostream>
#include<set>
#include<vector>
#include<algorithm>
#include<climits>
using namespace std;
#define endl '\n'int visit[1005];
vector<int> num;
set<int> s;
vector<int> answer;
int n;
2、主函数
先输入存入Hash,也就是放原始哈希表,然后调用init函数,再建立answer数组,最后输出。
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;vector<int> Hash(n);init(Hash,num);insertanswer(Hash);for(int i=0;i<answer.size()-1;i++)cout<<answer[i]<<' ';cout<<answer[answer.size()-1];return 0;
}
3、init函数
初始化Hash数组,把非负整数放进num数组中,然后排序,因为我们要数尽可能小的优先输出,所以要从小到大进行判断
void init(vector<int>&Hash,vector<int>&num)
{for(int i=0;i<n;i++){cin>>Hash[i];if(Hash[i]>=0)num.push_back(Hash[i]);}sort(num.begin(),num.end());
}
4、initanswer函数
遍历num数组,看能不能直接放入哈希表,即调用inserthash函数,如果不能就把数放进set中备用。
当我们遍历到后面某个数时,看看set中的数能不能插入哈希表,因为输出是多种可能数小的先输出,所以遍历set数组直到里面的数都不能放入哈希表,因为set里面的数比当前数大,再来判断当前数能否放入
void insertanswer(vector<int>& Hash)
{for(int i=0;i<num.size();i++){while(setinsert(Hash,num[i]));if(inserthash(Hash,num[i]))answer.push_back(num[i]);elses.insert(num[i]);}while(s.size())setinsert(Hash,INT_MAX);}
5、inserthash函数
先算出应该放入的下标,若这个下标对应的数不为当前数,则下标加1再取模。如果该位置的数还没放进来,说明当前数此时放早了,还不能放进来,返回0.
如果当前数与哈希表当前位置一样,则return 1,否则0.
bool inserthash(vector<int> &Hash,int elem)
{int idx=elem%n;while(Hash[idx]!=elem){if(visit[idx]==0)return 0;idx=(idx+1)%n;}if(elem==Hash[idx]){visit[idx]=1; return 1;}return 0;
}
6、setinsert函数
先把数都放进数组里,然后循环判断,如果不能放就继续,能放就放,并删除该元素,返回1.
都不能放返回0
bool setinsert(vector<int>& Hash,int up)
{vector<int> t(s.begin(),s.end());for(int i=0;i<t.size();i++){int elem=t[i];if(inserthash(Hash,elem)==0||elem>up)continue;s.erase(elem);answer.push_back(elem);return 1;}return 0;
}
7、总结
感觉像个模拟题,算法方面性不强,偏思维题+推导
完整代码如下
#include <iostream>
#include<set>
#include<vector>
#include<algorithm>
#include<climits>
using namespace std;
#define endl '\n'int visit[1005];
vector<int> num;
set<int> s;
vector<int> answer;
int n;bool inserthash(vector<int> &Hash,int elem)
{int idx=elem%n;while(Hash[idx]!=elem){if(visit[idx]==0)return 0;idx=(idx+1)%n;}if(elem==Hash[idx]){visit[idx]=1; return 1;}return 0;
}
bool setinsert(vector<int>& Hash,int up)
{vector<int> t(s.begin(),s.end());for(int i=0;i<t.size();i++){int elem=t[i];if(inserthash(Hash,elem)==0||elem>up)continue;s.erase(elem);answer.push_back(elem);return 1;}return 0;
}void init(vector<int>&Hash,vector<int>&num)
{for(int i=0;i<n;i++){cin>>Hash[i];if(Hash[i]>=0)num.push_back(Hash[i]);}sort(num.begin(),num.end());
}
void insertanswer(vector<int>& Hash)
{for(int i=0;i<num.size();i++){while(setinsert(Hash,num[i]));if(inserthash(Hash,num[i]))answer.push_back(num[i]);elses.insert(num[i]);}while(s.size())setinsert(Hash,INT_MAX);}
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;vector<int> Hash(n);init(Hash,num);insertanswer(Hash);for(int i=0;i<answer.size()-1;i++)cout<<answer[i]<<' ';cout<<answer[answer.size()-1];return 0;
}相关文章:
浙大数据结构:11-散列4 Hashing - Hard Version
这道题主要在于思路,感觉像个模拟题,用到了线性探测的算法 机翻 1、条件准备 visit数组看这个位置有没有放进来数,num存非负整数,s存未到放入时机的数。 answer存答案。n为总共数量。 #include <iostream> #include<…...
pm2 守护http-server
PM2(Process Manager 2)是一个用于Node.js应用程序的进程管理器。以下是使用PM2守护HTTP服务器的步骤: 1. 安装PM2 如果你还没有安装PM2,可以使用以下命令安装: npm install pm2 -g 2. 启动HTTP服务器 你需要一个HTT…...
国外电商系统开发-运维系统应用管理
还记得您常用的 service httpd start 、service sshd stop这样的命令吗?这些都是在停止启动服务,为了让研发人员,或者是快速操作服务,这里给大家制定了简单的应用管理。在这里,您可以把上面的命令加入进来,…...
剖析线程池实现原理
前置推荐阅读:java并发之线程池使用-CSDN博客 自定义实现一个带监控的线程池 首先我们继承ThreadPoolExecutor,实现构造函数以及重写beforeExecute和afterExecute两个函数,具体调用我们会在代码实现层面进行详细的分析。 import java.util.…...
【中危】Oracle TNS Listener SID 可以被猜测
一、漏洞详情 Oracle 打补丁后,复测出一处中危漏洞:Oracle TNS Listener SID 可以被猜测。 可以通过暴力猜测的方法探测出Oracle TNS Listener SID,探测出的SID可以用于进一步探测Oracle 数据库的口令。 建议解决办法: 1. 不应该使…...
三维测量与建模笔记 - 简介
计算机视觉相关主题 主要有两个最主要的层面,几何和语义。几何层面描述了客观事实,比如物体的距离、大小、形状、位置等。语义层面则是从人类抽象出的概念出发,描述了物体是什么、行为是什么、为什么,比如自动驾驶场景中识别出信号…...
Glide 简易教程
文章目录 1 引入依赖2 图片形状2.1 圆形 CircleCrop2.2 旋转 Rotate2.3 圆角 RoundedCorners2.4 自定义圆角 GranularRoundedCorners 1 引入依赖 implementation("com.github.bumptech.glide:glide:4.16.0")2 图片形状 2.1 圆形 CircleCrop Glide.with(this).load…...
flutter 使用三方/自家字体
将字体放入assets/fonts下 在pubspec.yaml文件中flutter下添加如下代码: flutter:fonts:- family: MyCustomFontfonts:- asset: assets/fonts/MyCustomFont.ttf 在flutter Text widget中使用字体 import package:flutter/material.dart;void main() > runApp(…...
2024台州赛CTFwp
备注: 解题过程中,关键步骤不可省略,不可含糊其辞、一笔带过。解题过程中如是自己编写的脚本,不可省略,不可截图(代码字体可以调小;而如果代码太长,则贴关键代码函数)。…...
词根plac-和place、please
英文有一个词根和单词place(v.放,放置 n.位置,地方;位,职位)长得很像,这个词根就是plac-,它有两个语义:高兴,愉悦;平静,抚平。 其实,place这个单…...
ubuntu下route命令详解
buntu下route命令详解 1、显示路由表 route -n2、临时路由设置,重启网卡失效#添加一条路由(发往192.168.62这个网段的全部要经过网关192.168.1.1)route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1#删除一条路由 删除的时候不用写网关route del …...
13.java面向对象:面向对象的三大特征
java面向对象:面向对象的三大特征 面向对象的三大特征1.封装get和set规范属性的合法化 2.继承类继承子类调用父类方法super的用法通过super调用父类public的属性super注意点super对比this 方法重写静态方法中奇怪的现象非静态方法 3.多态多态存在的条件多态中成员访…...
【VUE】Vue中的内置组件
Vue2中的内置组件: <component>:动态组件,可以根据传递的 is 属性值渲染不同的组件。<transition>:过渡动画组件,可以在元素插入、更新或移除时添加动画效果。<transition-group>:过渡动…...
若依框架篇-若依框架搭建具体过程、后端源代码分析、功能详解(权限控制、数据字典、定时任务、代码生成、表单构建、接口测试)
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 若依框架概述 1.1 若依构建 1.2 后端项目搭建 1.3 前端项目搭建 2.0 利用若依框架生成前后端代码案例 3.0 功能详解 3.1 功能详解 - 权限控制 3.1.1 使用权限控制…...
恢复已删除文件的 10 种安卓数据恢复工具
由于我们现在在智能手机上存储了大量重要文件,因此了解数据恢复工具变得很重要。您永远不会知道什么时候需要使用 安卓 数据恢复工具。 由于不乏 Windows 数据恢复工具,因此从崩溃的计算机中恢复文件很容易。但是,当涉及到从 安卓恢复数据时…...
Internet Download Manager2025快速下载,新功能解锁!
🌟下载界的“速度与激情”:Internet Download Manager超燃体验!🔥 嘿,各位小伙伴们!👋今天我要来给你们安利一个让我上网冲浪效率翻倍的神奇软件——Internet Download Manager(简称…...
传感器应用注意事项
一、通断型传感器 多数活动部件可直接作为导电材料的传感器为通断型传感器,在受力的条件下,其两个引脚的通断状态会发生改变。 常见通断型传感器 单通道按键多通道按键拨码开关接线帽磁力开关轻触开关… 通断型传感器无需供电,其控制环路…...
PayPal美区账号注册指南
PayPal作为一种便捷的在线支付方式,受到了广大用户的青睐。特别是对于那些需要在美国购物或者进行交易的人来说,注册并正确使用美国地区的PayPal账户显得尤为重要。本次小编会教大家如何注册和使用美区PayPal账户,并讨论是否需要“养号”的问…...
《鸟哥的Linux私房菜基础篇》---1 Linux的介绍与如何开启Linux之路
目录 一、Linux的简单介绍 1、Linux的简介 2、Linux的起源与发展 3、主要特点 4、应用场景 二、开启Linux之路 1、学习Linux的相关知识 2、正规表示法、管线命令、数据流重导向 前言 整体大纲预览 一、Linux的简单介绍 1、Linux的简介 (1)Linu…...
选择排序,插入排序,快速排序的java简单实现
代码功能 以下Java代码包含了三个排序算法的实现: 选择排序(Selection Sort):通过不断选择剩余元素中的最小值来排序数组。 插入排序(Insertion Sort):通过构建有序序列,对于未排序…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
