输入包含两行,第一行包含一个整数n,代表数组arr的长度,第二行包含n个整数,代表数组arr。
输出一个整数,代表arr的最长无重复字符的长度。
4 2 3 4 5
4
5 2 2 3 4 3
3
时间复杂度,额外空间复杂度。
#include <stdio.h> #include <stdlib.h> #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) #define MAX_VAL 1000001 int main(void) { int n, *arr, pre_idx[MAX_VAL]; int tmp, pre_len = -1, ans = 0; scanf("%d", &n); arr = (int *) malloc(sizeof(int) * n); for (int i = 0; i < n; i++) { scanf("%d", arr + i); } for (int i = 0; i < MAX_VAL; i++) { pre_idx[i] = -1; } for (int i = 0; i < n; i++) { tmp = i - pre_idx[arr[i]]; if (i != 0 && arr[i] != arr[i - 1]) tmp = MIN(tmp, pre_len + 1); ans = MAX(ans, tmp); pre_len = tmp; pre_idx[arr[i]] = i; } printf("%d\n", ans); free(arr); return 0; }