【华为OD机试】 阿里巴巴找黄金宝箱(Ⅲ)
题目描述
贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面贴有一个数字阿里巴巴念出一个咒语数字,查看宝箱是否存在两个不同箱子,这两个箱子上贴的数字相同同时这两个箱了的编号之差的绝对值小于等于咒语数字如果存在这样的一对宝箱,请返回最先找到的那对宝箱左边箱子的编号,如果不存在则返回-1。
用例1
输入6,3,1,6
输出 0
用例2
输入1,2,3,1
输出-1
#include <bits/stdc++.h> using namespace std; int main() { vector<int>a; int tmp = 0; int si = 0; while (cin >> tmp) { a.push_back(tmp); if (cin.get() == '\n') break; } int num = 0; map<int,vector<int>>p;//map的key存储箱子的数字,value作为数组存储值为key的箱子的编号(即箱子的位置) cin >>num; for (int i = 0; i < a.size(); i++) { p[a[i]].push_back(i); } for (int i = 0; i < p.size(); i++) { if (p[a[i]].size() > 1 && (p[a[i]][1] - p[a[i]][0]) <= num) {//如果存在有key有两个以上编号的元素,并且两个编号的差值小于等于num,则输出第一个箱子的编号。 cout<< p[a[i]][0]; return 0; } } return -1; }