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

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仅有一个元素,返回-1res.push_back(-1);}else {int min_distance = INT_MAX; //不确定最小值比多少少,这里就先给一个最大值,最小值的写法:INT_MINfor (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;
}

 

http://www.lryc.cn/news/330295.html

相关文章:

  • 2024年最新服装erp软件排名!(建议收藏)
  • Radash一款JavaScript最新的实用工具库,Lodash的平替!
  • 使用node爬取视频网站里《龙珠》m3u8视频
  • 搜索与图论——Prim算法求最小生成树
  • sqlmap基础知识
  • 读《C Primer Plus》
  • 深入理解计算机系统 家庭作业 2.66
  • 【服务端】node.js详细的配置
  • 二、CentOS基础配置(1.网络与包管理)
  • Golang基础-5
  • Mysql数据库:故障分析与配置优化
  • 常见的图像分析算法
  • 朵米3.5客服系统源码,附带系统搭建教程
  • Python 踩坑记
  • 搭建Spark单机版环境
  • 使用Flutter混淆技术保护应用隐私与数据安全
  • ClickHouse初体验
  • 在k8s中部署高可用程序实践和资源治理
  • WebView的使用与后退键处理-嵌入小程序或者 H5 页面
  • 【攻防世界】file_include (PHP伪协议+过滤器)
  • Linux 内核中PHY子系统(网络):PHY驱动
  • 【六 (1)机器学习-机器学习算法简介】
  • TCP服务端主动向客户端发送数据
  • ObjectiveC-03-XCode的使用和基础数据类型
  • YOLOv9改进策略 :主干优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer
  • 원클릭으로 주류 전자상거래 플랫폼 상품 상세 데이터 수집 및 접속 시연 예제 (한국어판)
  • 2024年github开源top100中文
  • 回收站删除的文件在哪里?专业恢复方法分享(最新版)
  • 什么是工时管理软件?
  • 一文解析智慧城市,人工智能技术将成“智”理主要手段