题解 | #最长无重复子数组#
最长无重复子数组
https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4
import java.util.*; public class Solution { /** * * @param arr int整型一维数组 the array * @return int整型 */ public int maxLength (int[] arr) { // write code here int[] chars = arr; if (chars.length == 0) return 0; // 用来保存每一个字符上一次出现的位置 Map<Integer, Integer> prevIdxes = new HashMap<>(); prevIdxes.put(chars[0], 0); // 以i - 1位置字符结尾的最长不重复字符串的开始索引(最左索引) int li = 0; // max 记录 int max = 1; for (int i = 1; i < chars.length; i++) { // i位置字符上一次出现的位置 Integer pi = prevIdxes.get(chars[i]); if (pi != null && li <= pi) { // 小于或者等于最左记录的索引时,直接就是更新li的值 // li最左位置小于或者等于字符上一次重复的位置,则直接是li为重复字符索引pi+1 li = pi + 1; } // li最左位置大于字符上一次重复的位置,则直接是li到i // 存储这个字符出现的位置 prevIdxes.put(chars[i], i); // 求出最长不重复子串的长度 max = Math.max(max, i - li + 1); } return max; } }
解题思想:滑动窗口
#算法笔记##算法#