两个列表的最小索引总和 --java记录

假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。

你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。
在这里插入图片描述
用map 记录list1,key为字符串,value为对应索引。第二次遍历list 2.如果包含相同key 然后比较两索引和是否为最小,是则记录字符串。(每次发现最小索引和需要删除之前的字符串)

class Solution {
   public String [] findRestaurant(String [] list1, String [] list2) {
		    
		HashMap <String,Integer> map1 = new HashMap<String,Integer>();
		LinkedList <String> list = new LinkedList<String>();  //用链表记录索引值最小的字符串,需要删除操作,比arraylist(底层用数组)效率快
		int temp = Integer.MAX_VALUE;
		for(int i = 0; i < list1.length; i++) {  //存储 list1  将字符串作为key,索引作为value
			map1.put(list1[i], i);
		}
		for(int j = 0; j < list2.length; j++) {
			if(map1.containsKey(list2[j]) ) {
				String str = list2[j];	
				int i = map1.get(str);  // 获得 list1 对应索引
				if(temp > i + j) {
					temp = i + j;   //记录最小的索引和
					list.clear();   //清除之前记录
					list.add(str) ;  //将索引值最小者,添加进list集合
				}else if(temp == i + j){
					list.add(str); 
					
				}else {
					continue;
				}
			}
		}
		 
		String [] strs = new String[list.size()];
		for(int k = 0 ; k < list.size(); k++) {
			strs[k] = list.get(k);
		}
		 
		return  strs;
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值