题目

类型:HashTable
image.png

解题思路

使用一个哈希表记录 list 1 中每个餐厅对应的索引下标,然后遍历 list 2,如果 list 2 中的餐厅存在于哈希表中,那么说明该餐厅是两人共同喜爱的,计算它的索引和。如果该索引和比最小索引和小,则清空结果,将该餐厅加入结果中,该索引和作为最小索引和;如果该索引和等于最小索引和,则直接将该餐厅加入结果中。

代码

  1. class Solution {
  2. public String[] findRestaurant(String[] list1, String[] list2) {
  3. Map<String, Integer> index = new HashMap<String, Integer>();
  4. for (int i = 0; i < list1.length; i++) {
  5. index.put(list1[i], i);
  6. }
  7. List<String> ret = new ArrayList<String>();
  8. int indexSum = Integer.MAX_VALUE;
  9. for (int i = 0; i < list2.length; i++) {
  10. if (index.containsKey(list2[i])) {
  11. int j = index.get(list2[i]);
  12. if (i + j < indexSum) {
  13. ret.clear();
  14. ret.add(list2[i]);
  15. indexSum = i + j;
  16. } else if (i + j == indexSum) {
  17. ret.add(list2[i]);
  18. }
  19. }
  20. }
  21. return ret.toArray(new String[ret.size()]);
  22. }
  23. }