注意一下可以通过i <= sumOfIndex进行一个剪枝
class Solution {
public String[] findRestaurant(String[] list1, String[] list2) {
Map<String, Integer> map = new HashMap<>();
int len1 = list1.length;
int len2 = list2.length;
for(int i = 0;i < len1;i ++) {
map.put(list1[i], i);
}
List<String> ans = new ArrayList<>();
int sumOfIndex = len1 + len2;
for(int i = 0;i < len2 && i <= sumOfIndex;i ++) {
int index = map.getOrDefault(list2[i], -1);
if(index != -1) {
if(i + index < sumOfIndex) {
ans = new ArrayList<>();
ans.add(list2[i]);
sumOfIndex = i + index;
} else if(i + index == sumOfIndex) {
ans.add(list2[i]);
}
}
}
return ans.toArray(new String[0]);
}
}

该博客介绍了在寻找两个列表中共同元素(如最佳餐厅)时,如何利用剪枝策略(如i<=sumOfIndex)来提高效率。通过构建哈希映射和迭代列表,算法能够在找到最优解时立即更新答案,减少了不必要的计算。此方法适用于解决交集问题并优化搜索过程。
713

被折叠的 条评论
为什么被折叠?



