2020年7月1日 最长重复子数组 findLength
默认格式:
class Solution {
public int findLength(int[] A, int[] B) {
}
}
解题思路:
1,暴力算法
遍历数组1中的每一个元素
用这个元素和数组2的每一个元素对比,如果相同
循环读取两个数组的下一个元素,直到不相同为止
这个算法太复杂,就不做实现了。
2,使用哈希表+链表
遍历一遍数组1,将其每个元素出现的位置存入到一个List中,然后存入hashmap中。
遍历数组2,每个元素在哈希表中是否存在,如果存在,遍历这个List中的所有位置,对这些位置进行测试,找出最大长度
写的时候已经发现了,用哈希表来存并没有减少核心部分的时间,时间复杂度依然很高。
public int findLength(int[] A, int[] B) {
int max=0;
//构建一个HashMap来存地址
HashMap<Integer, List<Integer>> map=new HashMap<>();
for (int i=0;i<A.length;i++){
if (map.get(A[i])==null){
List<Integer> list=new LinkedList<>