两个列表的最小索引和(简单)
2020年7月19日
题目来源:力扣
解题
思路如下:
1.把数组1用hashmap存储
2.遍历数组2,如果数组2元素在hashmap中有出现,则判断最小索引和
3.索引和如果相同,用arraylist进行存储,若新的索引和更小则清空之前arraylist的所有存储
4.利用toArray方法转换为数组
这里用toArray方法要注意如下:
/*
* 传入的数组长度有区别
* 若给定的数组长度不足以保存集合中所有的元素时
* 集合子集创建一个同类型数组
* 若长够,则使用我们给定的数组
*/
这里是不确定长度的数组,所以使用了list.toArray(new String[0])这种做法
- 哈希表做法
class Solution {
public String[] findRestaurant(String[] list1, String[] list2) {
// 用来存放第一个数组的索引和字符串
Map<String, Integer> map = new HashMap<>();
int index = 0, min = Integer.MAX_VALUE;
for(String s:list1){
map.put(s,index++);
}
List<String> list = new ArrayList<>();
for(int i = 0; i < list2.length; i++){
if(map.containsKey(list2[i])){
int temp = i + map.get(list2[i]);
if(min > temp){
min = temp;
list.clear();
list.add(list2[i]);
}
else if(min == temp){
list.add(list2[i]);
}
}
}
return list.toArray(new String[0]);
}
}