UVA11572 Unique Snowflakes题目大意给定 n 个数找尽量长的一个连续子序列使该子序列没有重复的元素。可以使用双指针法解决问题移动指针保证两个指针形成的子区间没有重复的元素C 可以用到 STL set Java 语言可以使用 HashSet 存储元素当然用哈希表代替也可以。指针 i 指向区间左端点指针 j 指向区间右端点j 不断尝试向右侧扩展区间将新数加入到 Set 中如果发现元素有重复则移动 i 指针缩短区间长度。代码实现import java.util.*; class Main{ public static void main(String[] args){ Scanner scnew Scanner(System.in); int n,t; tsc.nextInt(); for(int T0;Tt;T) { nsc.nextInt(); int[] a new int[n]; for (int i 0; i n; i) { a[i] sc.nextInt(); } SetInteger Snew HashSet(); int i0,j0,ans0; for( ;jn;j){ while(ijS.contains(a[j])){ S.remove(a[i]); i; } S.add(a[j]); ansMath.max(ans,j-i1); } System.out.println(ans); } } }实际上本题还有其他解法例如二分法map 等。二分法的时间性能与双指针法差别不大感兴趣的朋友可以用其他解法做出。双指针法本身并不难理解也比较容易编程实现不管是面试题还是算法竞赛题目中考察的都比较多。这种算法的编程的套路比较固定对于这类题型只需要分析清楚题目的应用场景选择适合的做法即可。