【C++】iota函数 + sort函数实现基于一个数组的多数组对应下标绑定排序
目录
一、iota函数
1. 函数解析
① 迭代器类型(补充)
② 头文件
③ 参数
2. 函数用途与实例
二、sort函数
1、 函数解读
2、实现倒序排列
2.1 greater 与 less 模板参数
2.2 lambda表达式
三、下标绑定排序(zip) --- 833.字符串中的查找与替换
一、iota函数
1. 函数解析
① 迭代器类型(补充)
ForwardIterator :ForwardIterator为正向迭代器,它只支持加操作不支持减操作;
② 头文件
#include <numeric> // std::iota
③ 参数
first:第一个参数是指向区间中的第一个位置的迭代器
last:第二个参数是指向区间最后一个位置的后一个位置的迭代器,也就一个左闭右开的区间
val:第三个参数传入区间第一个位置的值
2. 函数用途与实例
将首元素为val,公差为1的连续递增序列依次分配给区间 [first, last)
#include<iostream>
#include<vector>
#include <numeric> // std::iota
int main()
{std::vector<int> v(10);//分别将 0 1 2 3 4 5 6 7 8 9 填入区间 [ v.begin(), v.end() )std::iota(v.begin(), v.end(), 0);for (auto x : v) std::cout << x << ' ';std::cout << std::endl;int arr[10];std::iota(arr, arr + 10, 0);for (auto x : arr) std::cout << x << ' ';return 0;
}
二、sort函数
1、 函数解读
① 函数实现了默认升序对一个左闭右开的区间 [first, last) 进行排序
② 可通过仿函数重载operator< 或operator> 实现自定义数据排序
③ sort函数底层实现为快速排序,即为不稳定排序,等效元素相对位置可能会发生改变,若要实现稳定排序,可以使用stable_sort函数
2、实现倒序排列
2.1 greater 与 less 模板参数
#include<iostream>
#include<vector>
#include<algorithm> //sort函数的头文件
#include<functional> //greater算法的头文件
int main()
{std::vector<int> v = {3, 2, 6, 1, 8, 5, 2, 6};std::sort(v.begin(), v.end(), std::greater<int>());for (auto x : v) std::cout << x << ' ';return 0;
}
2.2 lambda表达式
#include<iostream>
#include<vector>
#include<algorithm> //sort函数的头文件
#include <numeric> using namespace std;
int main() {vector<int> id(10);// 0 1 2 3 4 5 6 7 8 9iota(id.begin(), id.end(), 0);// 9 8 7 6 5 4 3 2 1 0sort(id.begin(), id.end(), [&](int i, int j) {return id[i] > id[j]; });for (auto x : id) cout << x;return 0;
}
三、下标绑定排序(zip) --- 833.字符串中的查找与替换
你会得到一个字符串
s
(索引从 0 开始),你必须对它执行k
个替换操作。替换操作以三个长度均为k
的并行数组给出:indices
,sources
,targets
。要完成第
i
个替换操作:
- 检查 子字符串
sources[i]
是否出现在 原字符串s
的索引indices[i]
处。- 如果没有出现, 什么也不做 。
- 如果出现,则用
targets[i]
替换 该子字符串。例如,如果
s = "abcd"
,indices[i] = 0
,sources[i] = "ab"
,targets[i] = "eee"
,那么替换的结果将是"eeecd"
。所有替换操作必须 同时 发生,这意味着替换操作不应该影响彼此的索引。测试用例保证元素间不会重叠 。
- 例如,一个
s = "abc"
,indices = [0,1]
,sources = ["ab","bc"]
的测试用例将不会生成,因为"ab"
和"bc"
替换重叠。在对
s
执行所有替换操作后返回 结果字符串 。子字符串 是字符串中连续的字符序列。
示例 1:
输入:s = "abcd", indices = [0,2], sources = ["a","cd"], targets = ["eee","ffff"] 输出:"eeebffff" 解释: "a" 从 s 中的索引 0 开始,所以它被替换为 "eee"。 "cd" 从 s 中的索引 2 开始,所以它被替换为 "ffff"。
解题思路:由于前面的字符替换可能使字符串下标发生改变,所以考虑从后往前替换字符串s,即从大到小遍历indices的数,并将下标从indices[i]开始长度为sources[i].size()的s的字串与sources[i]比较,若相等,则特换成targets[i]
法一 下标数组:
为实现从大到小遍历indices的数,若直接用sort函数排序,那么原本的indices[i]就不对应sources[i]了,我们可以通过定义indices的下标数组,在以indices的值进行倒序排列;
class Solution {
public:string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets) {int n = indices.size();vector<int> id(n);iota(id.begin(), id.end(), 0);sort(id.begin(), id.end(), [&](int i, int j) {return indices[i] > indices[j];});for (auto i : id) { //i为indices倒序之后的下标int j = indices[i], len = sources[i].size();if (s.substr(j, len) == sources[i]) {s.replace(j, len, targets[i]);}}return s;}
};
法二 tuple:
直接将indices[i], sources[i], targets[i]通过tuple“打包”,再通过indices[i]倒序排列
class Solution {
public:string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets) {int n = indices.size();vector<tuple<int, string, string>> zip;for (int i = 0; i < n; i++) zip.push_back({indices[i], sources[i], targets[i]});sort(zip.begin(), zip.end(), greater<tuple<int, string, string>>());for (auto& [i, source, target] : zip) { int len = source.length();if (s.substr(i, len) == source) {s.replace(i, len, target);}}return s;}
};
相关文章:

【C++】iota函数 + sort函数实现基于一个数组的多数组对应下标绑定排序
目录 一、iota函数 1. 函数解析 ① 迭代器类型(补充) ② 头文件 ③ 参数 2. 函数用途与实例 二、sort函数 1、 函数解读 2、实现倒序排列 2.1 greater 与 less 模板参数 2.2 lambda表达式 三、下标绑定排序(zip) --- 833.字符串中的查找与替换 一、…...
C# window forms 进度条实现
在 C# Windows Forms 应用程序中,如果在后台执行长时间运行的任务,并希望同时更新进度条,可以使用多线程来实现。这将确保进度条的更新不会阻塞主线程,从而保持界面的响应性。以下是一个示例,演示了如何在后台执行任务…...

ListNode相关
目录 2. 链表相关题目 2.1 合并两个有序链表(简单):递归 2.2 删除排序链表中的重复元素(简单):一次遍历 2.3 两链表相加(中等):递归 2.4 删除链表倒数第N个节点&…...

docker的资源控制及docker数据管理
目录 一.docker的资源控制 1.CPU 资源控制 1.1 资源控制工具 1.2 cgroups有四大功能 1.3 设置CPU使用率上限 1.4 进行CPU压力测试 1.5 设置50%的比例分配CPU使用时间上限 1.6 设置CPU资源占用比(设置多个容器时才有效) 1.6.1 两个容器测试cpu 2&…...

通过请求头传数据向后端发请求
axios (get post请求、头部参数添加)傻瓜式入门axios_axiospost请求参数_web_blog的博客-CSDN博客...

产品流程图是什么?怎么做?
产品流程图是什么? 产品流程图是一种图形化的表达方式,用于描述产品开发、制造、销售、使用等各个阶段中涉及的流程、步骤和关系。它通过图形符号、箭头、文本等元素,展示了产品的各个环节之间的关联和顺序,通常被用于可视化产…...
面试之快速学习STL-map
关联式容器 包括 map、multimap、set 以及 multiset 这 4 种容器。和序列式容器区别: a . 关联式容器在存储元素时还会为每个元素在配备一个键,整体以键值对的方式存储到容器中。 b . 相比前者,关联式容器可以通过键值直接找到对应的元素&am…...
ES的索引结构与算法解析
提到ES,大多数爱好者想到的都是搜索引擎,但是明确一点,ES不等同于搜索引擎。不管是谷歌、百度、必应、搜狗为代表的自然语言处理(NLP)、爬虫、网页处理、大数据处理的全文搜索引擎,还是有明确搜索目的的搜索行为,如各大…...

32.Netty源码之服务端如何处理客户端新建连接
highlight: arduino-light 服务端如何处理客户端新建连接 Netty 服务端完全启动后,就可以对外工作了。接下来 Netty 服务端是如何处理客户端新建连接的呢? 主要分为四步: md Boss NioEventLoop 线程轮询客户端新连接 OP_ACCEPT 事件ÿ…...
代码随想录day11
20. 有效的括号 ● 力扣题目链接 ● 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。 ● 有效字符串需满足: ● 左括号必须用相同类型的右括号闭合。 ● 左…...
RabbitMQ实习面试题
RabbitMQ实习面试题 在 RabbitMQ 中,确保生产者消息正确发布以及确保消费者已经消费是非常重要的任务。以下是一些方法和策略,可以帮助您在 RabbitMQ 中实现这些目标: 确保生产者消息正确发布: 持久化消息:将消息设…...

Electron入门,项目运行,只需四步轻松搞定。
electron 简单介绍: 实现:HTML/CSS/JS桌面程序,搭建跨平台桌面应用。 electron 官方文档: [https://electronjs.org/docs] 本文是基于以下2篇文章且自行实践过的,可行性真实有效。 文章1: https://www.cnbl…...

【C++】visualstudio环境安装
记录了部分安装步骤,可能有点不全,参考下,需要的磁盘空间差不多20GB; 下载 https://visualstudio.microsoft.com/zh-hans/vs/ 下载完成: 双击进入安装状态: 根据自己的需求勾选安装项: 选择…...

使用MySQL:5.6和owncloud镜像搭建个人网盘
拉取镜像 [rootkvm ~]# docker pull mysql:5.6[rootkvm ~]# docker pull owncloud启动mysql容器 [rootkvm ~]# docker run -d --name db1 -e MYSQL_ROOT_PASSWORDroot mysql:5.6 db832e4e4333a0e9a7c152a67272721fdbe5381054090c5eb24f90455390a852 [rootkvm ~]# docker ps …...
php中创建对象时传递的参数是构造方法
PHP中创建对象时,可以通过构造方法的参数来传递参数值。构造方法是一个特殊的方法,在创建对象时会自动调用,用于进行对象的初始化操作。 以下是一个示例代码,展示了如何在PHP中使用构造方法传递参数: class MyClass …...

C++并发及互斥保护示例
最近要写一个多线程的并发数据库,主要是希望使用读写锁实现库的并发访问,同时考虑到其他平台(如Iar)没有C的读写锁,需要操作系统提供,就将读写锁封装起来。整个过程还是比较曲折的,碰到了不少问题,在此就简…...

新手常犯的错误,anzo capital昂首资本一招避免少走弯路
新手是不是经常交易中赚不到钱,今天anzo capital昂首资本就盘点一下新手常犯的错误,一招教你少走弯路。 一.随便选择交易账户 开立实时账户时选择正确的账户类型,anzo capital昂首资本教你比较所有提供的账户类型,选择最符合财务…...
Java Vue (el-date-picker组件) 前后端 关于时间格式数据的处理方法
前端使用 elment-ui 组件 el-date-picker 其中组件需要格式化时间,增加属性 value-format"yyyy-MM-dd" 后端 Java 接收参数类型 后端Dto 使用Date接收,并添加JsonFormat注解 JsonFormat(pattern"yyyy-MM-dd") private Date testTi…...

Python爬虫——scrapy_多条管道下载
定义管道类(在pipelines.py里定义) import urllib.requestclass DangDangDownloadPipelines:def process_item(self, item, spider):url http: item.get(src)filename ../books_img/ item.get(name) .jpgurllib.request.urlretrieve(url, filename…...

lombok启动不生效(什么方法都试了,可还是不生效怎么办 ?! 救救我)
使用IntelliJ IDEA 2021.1.3(Ultimate Edition)时提示Lombok不生效 java: You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled. 方式一:我们手动更新一下版本到以下版本 <!--Lombok--&…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...