当前位置: 首页 > news >正文

acwing算法基础之基础算法--整数离散化算法

目录

  • 1 知识点
  • 2 模板

1 知识点

整个范围很大,但存在的数据点很少。比如从 − 1 0 9 -10^9 109 1 0 9 10^9 109,但总共只有 1 0 6 10^6 106个数。

可以采用离散化的思想来做,即将离散的大数值映射成连续的小数值(一般是 1 , 2 , 3 , ⋯ , n 1,2,3,\cdots,n 1,2,3,,n)。

看到这里,你是不是觉得小数值与向量下标比较相似,是的,它本质就是下标,从1开始编号还是从0开始编号,取决于业务逻辑。acwing讲解例题中是从1开始编号的。

2 模板

//输入是向量vector<int>alls
//输出是函数find(),输入大数值得到小数值
sort(alls.begin(), alls.end());
alls.erase(unique(alls.begin(), alls.end()), alls.end());int find(vector<int> &alls, int x) { //找到大于等于x的第1个下标,题目中保证一定存在xint l = 0, r = alls.size() - 1;while (l < r) {int mid = (l + r) / 2;if (alls[mid] >= x) {r = mid;} else {l = mid + 1;}}return l + 1;//从1开始编号。如果返回l,表示从0开始编号。
} //其中unique()函数使用的是库函数,也可以自己实现,如下所示
vector<int>::iterator unique(vector<int> &a) {int j = 0;for (int i = 0; i < a.size(); ++i) {if (i == 0 || a[i] != a[i-1]) {a[j++] = a[i]; }}return a.begin() + j;
}

当然,上述模板也可以用哈希表来实现,如下,

//输入是向量vector<int>alls
//输出是哈希表mp,输入大数值得到小数值
sort(alls.begin(), alls.end());
alls.erase(unique(alls.begin(), alls.end()), alls.end());unordered_map<int,int> mp;
for (int i = 0; i < alls.size(); ++i) {mp[alls[i]] = i + 1; //从1开始编号。如果写i,表示从0开始编号。
}

相关文章:

acwing算法基础之基础算法--整数离散化算法

目录 1 知识点2 模板 1 知识点 整个范围很大&#xff0c;但存在的数据点很少。比如从 − 1 0 9 -10^9 −109到 1 0 9 10^9 109&#xff0c;但总共只有 1 0 6 10^6 106个数。 可以采用离散化的思想来做&#xff0c;即将离散的大数值映射成连续的小数值&#xff08;一般是 1 , …...

基于SSM框架的安全教育平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

Kafka生产者使用案例

1.生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程&#xff1a; 1)Kafka 会将发送消息包装为 ProducerRecord 对象&#xff0c; ProducerRecord 对象包含了目标主题和要发送的内容&#xff0c;同时还可以指定键和分区。在发送 ProducerRecord 对象前&#xff0c…...

EasyX图形库实现贪吃蛇游戏

⭐大家好&#xff0c;我是Dark Falme Masker,学习了动画制作及键盘交互之后&#xff0c;我们就可以开动利用图形库写一个简单的贪吃蛇小游戏&#xff0c;增加学习乐趣。 ⭐专栏&#xff1a;EasyX部分小游戏实现详细讲解 最终效果如下 首先包含头文件 #include<stdio.h> #…...

利用 Amazon CodeWhisperer 激发孩子的编程兴趣

我是一个程序员&#xff0c;也是一个父亲。工作之余我会经常和儿子聊他们小学信息技术课学习的 Scratch 和 Kitten 这两款图形化的少儿编程工具。 我儿子有一次指着书房里显示器上显示的 Visual Studio Code 问我&#xff0c;“为什么我们上课用的开发界面&#xff0c;和爸爸你…...

2023年中国分子筛稀土催化材料竞争格局及行业市场规模分析[图]

稀土催化材料能够起到提高催化剂热稳定性、催化剂活性、催化剂储氧能力&#xff0c;以及减少贵金属活性组分用量等作用&#xff0c;广泛应用于石油化工、汽车尾气净化、工业废气和人居环境净化、燃料电池等领域。 2015-2023年中国稀土催化材料规模及预测 资料来源&#xff1a;…...

vue3插件——vue-web-screen-shot——实现页面截图功能

最近在看前同事发我的vue3框架时&#xff0c;发现他们有个功能是要实现页面截图功能。 vue3插件——vue-web-screen-shot——实现页面截图功能 效果图如下&#xff1a;1.操作步骤1.1在项目中添加vvue-web-screen-shot组件1.2在项目入口文件导入组件——main.ts1.3在需要使用的页…...

简单总结Centos7安装Tomcat10.0版本

文章目录 前言JDK8安装部署Tomcat 前言 注意jdk与tomcat的兼容问题&#xff0c;其他的只要正确操作一般问题不大 Tomcat 是由 Apache 开发的一个 Servlet 容器&#xff0c;实现了对 Servlet 和 JSP 的支持&#xff0c;并提供了作为Web服务器的一些特有功能&#xff0c;如Tomca…...

ffmpeg中AVCodecContext和AVCodec的关系分析

怎么理解AVCodecContext和AVCodec的关系 AVCodecContext和AVCodec是FFmpeg库中两个相关的结构体&#xff0c;它们在音视频编解码中扮演着不同的角色。 AVCodecContext&#xff1a;是编解码器上下文结构体&#xff0c;用于存储音视频编解码器的参数和状态信息。它包含了进行音视…...

2023年中国门把手产量、销量及市场规模分析[图]

门把手行业是指专门从事门把手的设计、制造、销售和安装等相关业务的行业。门把手是门窗装饰硬件的一种&#xff0c;用于开启和关闭门窗&#xff0c;同时也具有装饰和美化门窗的作用。 门把手行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 随着消…...

HTML 核心技术点基础详细解析以及综合小案例

核心技术点 网页组成 排版标签 多媒体标签及属性 综合案例一 - 个人简介 综合案例二 - Vue 简介 02-标签语法 HTML 超文本标记语言——HyperText Markup Language。 超文本&#xff1a;链接 标记&#xff1a;标签&#xff0c;带尖括号的文本 标签结构 标签要成…...

BAT学习——批处理脚本(也称为BAT文件)常用语法元素与命令

批处理脚本&#xff08;也称为BAT文件&#xff09;使用Windows的批处理语言编写&#xff0c;它具有一些常用的语法元素和命令。以下是一些BAT编程的常用语法元素和命令&#xff1a; 命令行命令&#xff1a; 批处理脚本通常包含一系列Windows命令&#xff0c;例如echo&#xff0…...

AMD AFMF不但能用在游戏,也适用于视频

近期AMD发布了AMD Software Adrenalin Edition预览版驱动程序&#xff0c;增加了对平滑移动帧&#xff08;AMD Fluid Motion Frames&#xff0c;AFMF&#xff09;功能的支持&#xff0c;也就是AMD的“帧生成”技术&#xff0c;与DLSS 3类似&#xff0c;作为FidelityFX Super Re…...

CSS 常用样式浮动属性

一、概述 CSS 中&#xff0c;浮动属性的作用是让元素向左或向右浮动&#xff0c;使其他元素围绕它排布&#xff0c;常用的浮动属性有以下几种&#xff1a; float: left; 使元素向左浮动&#xff0c;其他元素从右侧包围它。 float: right; 使元素向右浮动&#xff0c;其他元素…...

Linux引导故障排除:从问题到解决方案的详细指南

1 BIOS初始化 通电->对硬件检测->初始化硬件时钟 2 磁盘引导及其修复 2.1 磁盘引导故障 磁盘主引导记录&#xff08;MBR&#xff09;是在0磁道1扇区位置&#xff0c;446字节。 MBR作用&#xff1a;记录grub2引导文件的位置 2.2 修复 步骤&#xff1a;1、光盘进…...

【vim 学习系列文章 6 -- vim 如何从上次退出的位置打开文件】

文章目录 1.1 vim 如何从上次退出的位置打开文件1.2 autogroup 命令学习1.2.1 augroup 基本语法 1.3 vim call 命令详细介绍 1.1 vim 如何从上次退出的位置打开文件 假设我打开了文件 test.c&#xff0c;然后我向下滚动到第 50 行&#xff0c;然后我做了一些修改并关闭了文件。…...

怎样学习C#上位机编程?

怎样学习C#上位机编程&#xff1f; 00001. 掌握C#编程和.NET框架基础。 00002. 学WinForm应用开发&#xff0c;了解控件使用和事件编程。 00003. 熟悉基本数据结构和算法&#xff0c;如链表、栈、队列。 00004. 理解串口通信协议和方法&#xff0c;用于与硬件交互。 00005…...

【算法-动态规划】两个字符串的删除操作-力扣 583

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

【06】基础知识:typescript中的泛型

一、泛型的定义 在软件开发中&#xff0c;我们不仅要创建一致的定义良好的API&#xff0c;同时也要考虑可重用性。 组件不仅能支持当前数据类型&#xff0c;同时也能支持未来的数据类型&#xff0c;这在创建大型系统时提供了十分灵活的功能。 在像 C# 和 Java 这样的语言中&…...

flutter 绘制原理探究

文章目录 Widget1、简介2、源码分析Element1、简介2、源码分析RenderObjectWidget 渲染过程总结思考Flutter 的核心设计思想便是“一切皆 Widget”,Widget 是 Flutter 功能的抽象描述,是视图的配置信息,同样也是数据的映射,是 Flutter 开发框架中最基本的概念。 在 Flutter…...

快速免费解锁网易云音乐NCM格式:ncmdumpGUI完整使用指南

快速免费解锁网易云音乐NCM格式&#xff1a;ncmdumpGUI完整使用指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&am…...

【CH32V307实战】4P OLED屏I2C驱动移植与快速显示指南

1. CH32V307与4P OLED屏的硬件连接指南 第一次拿到CH32V307开发板和4P OLED屏时&#xff0c;最让我头疼的就是接线问题。这种4线制OLED&#xff08;通常标注为4P或4PIN&#xff09;相比传统的7线制简化了不少&#xff0c;但引脚定义各家厂商可能略有差异。经过多次实测&#xf…...

OpenSpire:开源贡献者协作平台的设计理念与实战指南

1. 项目概述&#xff1a;一个面向开源贡献者的协作平台最近在和一些刚接触开源的朋友交流时&#xff0c;发现一个挺普遍的现象&#xff1a;很多人对参与开源项目充满热情&#xff0c;但第一步“如何找到合适的项目并上手”就卡住了。GitHub上项目浩如烟海&#xff0c;一个新手面…...

英雄联盟智能助手Seraphine:告别手动查询,实现高效游戏决策自动化

英雄联盟智能助手Seraphine&#xff1a;告别手动查询&#xff0c;实现高效游戏决策自动化 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟排位赛中&#xff0c;你是否曾因错过接受对局而懊恼不已&a…...

开源AI图像生成工具Dream-Creator:本地部署与Stable Diffusion实战指南

1. 项目概述&#xff1a;一个开源的AI图像生成与创作工具 最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目叫“Dream-Creator”。光看名字&#xff0c;你可能会联想到一些AI绘画或者创意生成工具。没错&#xff0c;这确实是一个围绕AI图像生成的开源项目。作为一个在…...

Go语言构建开发者命令行工具箱:navis项目架构与实现解析

1. 项目概述&#xff1a;一个为开发者打造的“导航”工具箱最近在GitHub上看到一个挺有意思的项目&#xff0c;叫navis&#xff0c;作者是NaveenBuidl。光看名字&#xff0c;你可能会联想到“导航”或者“航行”&#xff0c;没错&#xff0c;这个项目的核心定位就是一个为开发者…...

ARM Jazelle技术:硬件加速Java字节码执行详解

1. ARM Jazelle技术概述Jazelle技术是ARM架构中用于硬件加速Java字节码执行的关键扩展&#xff0c;最早出现在ARMv5TE架构中。这项技术通过在处理器内部集成Java字节码执行单元&#xff0c;实现了Java虚拟机(JVM)功能的硬件化。与传统的软件解释器相比&#xff0c;Jazelle能够将…...

VS Code光标主题buen-cursor:提升开发者编码体验的视觉优化方案

1. 项目概述&#xff1a;一个为开发者定制的光标主题 如果你和我一样&#xff0c;每天有超过8小时的时间都泡在代码编辑器里&#xff0c;那么你一定对那个闪烁的光标再熟悉不过了。它可能是你思考的起点&#xff0c;也可能是你调试时目光的焦点。但你是否想过&#xff0c;这个…...

开源UI组件库深度解析:从设计系统到工程实践

1. 项目概述&#xff1a;一个开源UI组件库的诞生与价值如果你是一名前端开发者&#xff0c;或者正在负责一个需要快速搭建现代化界面的项目&#xff0c;那么你大概率听说过或者用过一些知名的UI组件库。今天我想深入聊聊一个在GitHub上拥有超过1.5万星标&#xff0c;被许多开发…...

量子纠错程序的形式化验证方法与工程实践

1. 量子纠错程序验证的核心挑战量子纠错&#xff08;Quantum Error Correction, QEC&#xff09;是量子计算实现实用化的关键技术屏障。与传统经典计算不同&#xff0c;量子系统面临着更为复杂的噪声环境&#xff1a;退相干、门操作误差、测量错误等量子特异性噪声会迅速破坏脆…...