599. 两个列表的最小索引总和

该程序实现了寻找两个餐厅列表中,拥有相同名称的餐厅,并返回这些餐厅名字的列表,使得它们在各自列表中的索引之和最小。算法通过哈希映射存储餐厅名称与其在第一个列表中的索引,然后遍历第二个列表,计算索引和并更新最小索引和的记录。最终返回的是具有最小索引和的餐厅名称列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

599. 两个列表的最小索引总和

题目描述

在这里插入图片描述

哈希映射实现

#pragma once
#include <iostream>
#include<vector>
#include<unordered_map>
using namespace std;

class Solution 
{
public:
	vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) 
	{
		unordered_map<string, int> string2int;
		unordered_map<int, vector<string>> int2string;

		int n = list1.size();
		int m = list2.size();

		int minsum = INT_MAX;

		for (int i = 0; i < n; i++)
		{
			string2int.insert(make_pair(list1[i], i));
		}


		for (int j = 0; j < m; j++)
		{
			if (string2int.count(list2[j]) > 0)
			{
				int sum = string2int[list2[j]] + j;
				int2string[sum].push_back(list2[j]);
				minsum = sum < minsum ? sum : minsum;
			}
		}

		return int2string[minsum];


	}
};






int main()
{

	/*string str1[] = { "Shogun", "Tapioca Express", "Burger King", "KFC" };
	string str2[] = { "KFC", "Shogun", "Burger King" };*/

	string str1[] = { "Shogun", "Tapioca Express", "Burger King", "KFC" };
	string str2[] = { "KFC", "Burger King", "Tapioca Express", "Shogun" };


	vector<string> list1;
	vector<string> list2;

	for (int i = 0; i < sizeof(str1) / sizeof(string); i++)
	{
		list1.push_back(str1[i]);
	}

	for (int j = 0; j < sizeof(str2) / sizeof(string); j++)
	{
		list2.push_back(str2[j]);
	}


	Solution S;
	vector<string> ans = S.findRestaurant(list1, list2);
	for (auto it = ans.begin(); it != ans.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;




	system("pause");
	return 0;
}

运行结果

在这里插入图片描述

提交结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值