Проблема с вашим алгоритмом возникает тогда, когда текущий срез содержит одинаковое число в самой левой и самой правой позиции. Какой номер вы удалите? Левый или правый?
Ваш текущий алгоритм всегда удаляет левое число, но это может быть неверно. Рассмотрим:
int arr[4] = {1,9, 10, 1 };
// left average = (1 + 9 + 10) /3
// right average = (9 + 10 + 1) /3
Левое среднее и правое среднее одинаковы, поэтому ваш код удаляет левое число и переходит к следующему фрагменту:
{9, 10, 1 };
что не так. Теперь вы больше не можете достичь правильного результата:
{1,9};