#include <stdio.h>
#include <stdlib.h>
int* shortest_identical_consecutive_subarray(int arr[], int size, int* outLen) {
if (size == 0) {
*outLen = 0;
return NULL;
}
int bestStart = 0;
int bestLen = size;
int currentStart = 0;
int currentLen = 1;
for (int i = 1; i < size; i++) {
if (arr[i] == arr[i - 1]) {
currentLen++;
} else {
if (currentLen < bestLen) {
bestLen = currentLen;
bestStart = currentStart;
}
currentStart = i;
currentLen = 1;
}
}
if (currentLen < bestLen) {
bestLen = currentLen;
bestStart = currentStart;
}
int* result = malloc(bestLen * sizeof(int));
for (int i = 0; i < bestLen; i++)
result[i] = arr[bestStart + i];
*outLen = bestLen;
return result;
}
/* ============================================================
MAIN PROGRAM
============================================================ */
int main() {
int arr[] = {3,3,3, 7,7,7,7,7, 2,2, 5,5,5,5, 9,9,9,9,9,9};
int size = sizeof(arr) / sizeof(arr[0]);
int outLen;
int* resultArr = shortest_identical_consecutive_subarray(arr, size, &outLen);
printf("Array result: ");
for (int i = 0; i < outLen; i++) printf("%d ", resultArr[i]);
printf("\n");
free(resultArr);
return 0;
}
/*
run:
Array result: 2 2
*/