0-9的整数数组,找一个尽量长的连续子序列,使得该子序列中没有相同的元素
程序员文章站
2024-02-03 16:54:40
...
问题:0-9的整数数组,找一个尽量长的连续子序列,使得该子序列中没有相同的元素
分析:利用滑动窗口的想法,遇到不重复的元素,窗口结尾往后走。遇到重复的,判断该子序列长度count与到目前为止最大长度max的大小,调整窗口,记录最大序列起止位置i和j,继续进行,直到末尾。
//唯一的雪花 找一个尽量长的连续子序列,该序列中没有相同的元素 (0-9)
int isIn(int arr[], int start, int end){
for(int i=start; i<end; i++){
if(arr[i] == arr[end]){
printf(" %d",arr[i]);
return 1;
}
}
return 0;
}
void q1(int arr[], int n){
int last[10]; //last是指该元素上一次出现的位置
int start=0, end=0, sign = 0;
int max = 0, count = 0, i,j;
for(; end<n; end++){
if(end == n-1){ //判断是否到结尾
sign = 1;
}
printf("strart:%d,end:%d\n",start,end);
if(!isIn(arr, start, end) && sign == 0){ // 如果end位置处的元素没有重复
last[arr[end]] = end;
count += 1;
}else{
if(max < count){
i = start;
j = end-1;
max = count;
printf("i:%d,j:%d\n",i,j);
}
start = last[arr[end]]+1;
count = end - start+1; //不能简单地把count赋值为0
last[arr[end]] = end;
}
}
//输出
for(; i<=j; i++){
printf("%d\n",arr[i]);
}
}
int main(){
int arr[] = {1,3,4,2,5,2,3,1,2,3,1,3,2,1,5,6,7,8,9};
q1(arr ,19);
getchar();
return 0;
}