可以把双层循环的O(n^2)算法优化为O(n)。
思路:a是被操作数组,s是用于记录某个数字出现了几次,a[i]代表当前指到的数字,s[a[i]]则代表这个数字出现了几次,当一个数字出现了一次以上的时候,代表在i指针和j指针之内必有重复数字,j指针一直向前挪,直到该数字出现次数在i和j中恢复为1.
不过要注意的是,要记录一下所探索过的所有不包含重复数字的子序列,最后比较长度,挑选出最长的。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class shuangzhizhen {
// 内部类,用于记录曾经走过的子序列,
//若不记录则会发生末尾有两个重复数字的话,
//如1 2 3 4 4,运行结果会为1
class position{
int i;
int j;
int length;
position(int i,int j,int length