C++刷题篇——04找等值元素

一、题目

二、解题思路

1、分割后放进二维数组

2、使用map,key为数值,value为其坐标

3、遍历二维数组元素,再在map中找该元素对应的value值(二维数组形式),倘若value.size为1,那直接返回-1,否则继续遍历value(二维数组),将值减去当前i,j坐标后不断比较取出最小值放进数组,放进的位置正好就是该元素对应的i,j位置

三、代码

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>

using namespace std;

vector<int>split(string params) {
	vector<int>p;
	while (params.find(" ") != string::npos) {
		int found = params.find(" ");
		p.push_back(stoi(params.substr(0, found)));
		params = params.substr(found + 1);
	}
	p.push_back(stoi(params));
	return p;
}

int main() {
	string m_str;
	getline(cin, m_str);
	int m = stoi(m_str); //m行

	string n_str;
	getline(cin, n_str);
	int n = stoi(n_str); //n列

	vector<int>temp;
	vector<vector<int>>temps;
	for (int i = 0; i < m; i++) {
		string num;
		getline(cin, num);
		temp = split(num);
		temps.push_back(temp);
		temp.clear();
	}

	//key为数值,value为该值的坐标
	map<int, vector<vector<int>>>num_map;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			vector<int>sit;
			sit.push_back(i);
			sit.push_back(j);
			num_map[temps[i][j]].push_back(sit);
			sit.clear();
		}
	}

	vector<int>res;
	vector<vector<int>>result;
	for (int i = 0; i < m; i++) { //注意此刻是遍历二维数组元素,因为便于后面减去i,j坐标后直接放进数组,放进的位置正好就是该元素对应的位置
		for (int j = 0; j < n; j++) {
			if (num_map[temps[i][j]].size() == 1) { //依次遍历二维数组key,如果其对应的value仅有一个元素,返回-1
				res.push_back(-1);
			}
			else {
				int min_distance = INT_MAX; //不确定最小值比多少少,这里就先给一个最大值,最小值的写法:INT_MIN
				for (int k = 0; k < num_map[temps[i][j]].size(); k++) {
					int distance = abs(num_map[temps[i][j]][k][0] - i) + abs(num_map[temps[i][j]][k][1] - j); //当前元素坐标就为i,j,所以直接遍历坐标相减即可
					if (distance == 0) { //排除坐标等于自己的情况
						continue;
					}
					min_distance = min(min_distance, distance);
				}
				res.push_back(min_distance); //由于依次遍历i,j,所以放进的位置也是按照顺序的
			}
		}
		result.push_back(res); //遍历完每一行后,放进二维数组
		res.clear(); //及时清空一维数组
	}

	string r = "";
	for (auto x : result) {
		for (auto y : x) {
			r += to_string(y) + ",";
		}
		r = r.substr(0, r.size() - 1) + "],[";
	}
	r = "[[" + r.substr(0, r.size() - 2) + "]";
	cout << r << endl;
	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/504647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式第一部分-第一集:ARM那些你得知道的事

ARM&#xff1a;Advanced RISC Machine&#xff0c;先进精简指令集机器 ARM公司只做设计&#xff0c;不生产。 国内IC生产厂商&#xff1a;华为海思、全志、瑞芯微、MTK&#xff08;联发科&#xff09; 扩展&#xff1a;ARM的商业模式了解。 使用三星S5PV210开发板进行视频的讲…

改进的图像LSB加密算法:Matrix encoding embedding

参考文献1 Visually secure image encryption using adaptive-thresholding sparsification and parallel compressive sensing 算法实现 简单说明 算法步骤概述 定义函数f:这个函数用于计算给定码字b的一个特定值,此值将与秘密信息x进行比较。这个计算涉及到将码字b的每一…

基于springboot+vue+Mysql的新生宿舍管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

Redis命令-Set命令

基础篇Redis 4.7 Redis命令-Set命令 Redis的Set结构与Java中的HashSet类似&#xff0c;可以看做是一个value为null的HashMap。因为也是一个hash表&#xff0c;因此具备与HashSet类似的特征&#xff1a; 无序元素不可重复查找快支持交集.并集.差集等功能 Set类型的常见命令 …

Linux:查看系统各个组件性能的方法

查看cpu top 还有更为直观的 htop 可以同时看到&#xff0c;内存占用&#xff0c;cpu占用&#xff0c;交换内存的占用 vmstat 是比较综合的可以看到内存&#xff0c;交换内存&#xff0c;io吞吐&#xff0c;系统&#xff0c;cpu 查看内存 free -h 可以看懂内存的使用情况 …

web 技术中前端和后端交互过程

1、客户端服务器交互过程 客户端:上网过程中,负责浏览资源的电脑,叫客户端服务器:在因特网中,负责存放和对外提供资源的电脑叫服务器 服务器的本质: 就是一台电脑,只不过相比个人电脑它的性能高很多,个人电脑中可以通过安装浏览器的形式,访问服务器对外提供的各种资源。 个人…

scratch小动物的晚会 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析

目录 scratch小动物的晚会 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、 推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 …

CVAE-GAN——生成0-9数字图像(Pytorch+mnist)

1、简介 CVAE-GAN&#xff08;Conditional Variational Autoencoder Generative Adversarial Network&#xff09;是一种混合型生成模型&#xff0c;结合了条件变分自编码器&#xff08;CVAE&#xff09;和生成对抗网络&#xff08;GAN&#xff09;的思想。在CVAE-GAN中&#…

我的C++奇迹之旅相遇:支持函数重载的原理

文章目录 &#x1f4dd;前言&#x1f320; C支持函数重载的原理&#xff1a;名字修饰(name Mangling)&#x1f309;不同编译器不同函数名修饰规则 &#x1f320;Windows下名字修饰规则&#x1f6a9;总结 &#x1f4dd;前言 函数重载概念 函数重载&#xff1a;是函数的一种特殊…

加密/ 解密 PDF:使用Python为PDF文档设置、移除密码

在数字化时代&#xff0c;文档的安全性变得越来越重要。特别是对于包含敏感信息的PDF文件&#xff0c;确保其不被未经授权的人员访问或修改是至关重要的。本文将介绍如何使用Python在PDF文档中设置密码&#xff0c;以及如何移除已经设置的密码。 目录 PDF加密基础知识 Pytho…

大话设计模式之建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在通过将复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 在建造者模式中&#xff0c;通常包含以下几个角色&#xff1a; Director&#xff08;指挥…

新增收货地址

目录 &#x1f9c2;1.创建controller层 &#x1f953;2.创建service层 &#x1f32d;3.注意细节 &#x1f37f;4.避免dao数据暴漏 1.创建controller层 controller不做逻辑操作&#xff0c;只接受前端的数据 1.添加Api设置swagger模块名称2.RestController以json形式返回…

java计算机网络(一)-- url,tcp,udp,socket

网络编程&#xff1a; 计算机网络 计算机网络指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。 网络协议…

C#.net8创建webapi,使用SqlSugar,仓储模式,DTO,服务层,控制层的综合应用(企业级)

本文源码地址: https://download.csdn.net/download/u012563853/89036104 源码中,也有详细的注释说明。 代码总览: 这是一个综合性比较强的文章,需要有一定的基础,没有基础的人,看了后,会全面的了解一下,有基础的人,看了后会加强认识,更加的巩固,直接在项目中去应…

vue3全局控制Element plus所有组件的文字大小

项目框架vue-右上角有控制全文的文字大小 实现&#xff1a; 只能控制element组件的文字及输入框等大小变化&#xff0c;如果是自行添加div,text, span之类的控制不了。 配置流程 APP.vue 使用element的provide&#xff0c;包含app <el-config-provider :locale"loca…

mybatis的基于注解和xml的两种实现方式详解

文章简介 本文介绍了springbootmybatis实现数据库操作的两种实现方式&#xff0c;经测试均可运行使用。整体而言注解更加简便&#xff0c;但面对一些复杂查询&#xff0c;可能需要使用到注解方式。 注解方式 pom依赖&#xff1a; <dependencies><!--连接数据库--&…

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了&#xff0c;就酱。 参考阅读&#xff1a;极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集&#xff0c;这个工具集可以将 C/C 代码编译成对应 JavaScript 代…

冒泡排序---算法

1、算法概念 冒泡排序&#xff1a;它重复地走访要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。这个算法越小的元素会经由交换慢慢“浮”到…

Linux企业级别日志的查找

企业级别日志的查找 查看mysql数据库的日志错误日志&#xff08;Error Log&#xff09;查询日志&#xff08;General Query Log&#xff09;慢查询日志&#xff08;Slow Query Log&#xff09;事务日志&#xff08;Transaction Log&#xff09;二进制日志&#xff08;Binary Lo…

python-tkinter程序的带包发布pyinstaller的使用闭坑

一、pyinstaller 不是内部或外部命令 1、安装pyinstaller 安装的时候一定注意别少了install后的er&#xff0c;pyinstaller,否则会安装成其他的程序的。安装的指令如下&#xff1a; pip install pyinstaller2、配置运行环境 首先找到你的python的安装目录&#xff0c;这个我…