浙大数据结构: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):通过构建有序序列,对于未排序…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
Shell 解释器 bash 和 dash 区别
bash 和 dash 都是 Unix/Linux 系统中的 Shell 解释器,但它们在功能、语法和性能上有显著区别。以下是它们的详细对比: 1. 基本区别 特性bash (Bourne-Again SHell)dash (Debian Almquist SHell)来源G…...
使用homeassistant 插件将tasmota 接入到米家
我写一个一个 将本地tasmoat的的设备同通过ha集成到小爱同学的功能,利用了巴法接入小爱的功能,将本地mqtt转发给巴法以实现小爱控制的功能,前提条件。1需要tasmota 设备, 2.在本地搭建了mqtt服务可, 3.搭建了ha 4.在h…...
