c - Find the minimal average of any slice containing at least two elements in an array
问题描述
The full question is:Min Average Two Slice Codility
I don't understand why my code doesn't work.
I know the correct answer, but I can't find a contra example for my code:
struct partaverg {
long double min;
int slice;
};
long long sumfun(int arr[], int N) {
int sum = 0;
for (int i = 0; i < N; ++i)
sum += arr[i];
return sum;
}
int solution(int A[], int N) {
long long sum;
long double new_average;
int left = 0;
int right = N - 1;
long double numofnum;
long double leftaverg, rightaverg;
sum = sumfun(A, N);
struct partaverg result;
new_average = result.min = sum / (long double)N;
result.slice = 0;
while (left + 1 < right) {
numofnum = right - left;
leftaverg = (sum - A[left]) / numofnum;
rightaverg = (sum - A[right]) / numofnum;
if (leftaverg > rightaverg) {
sum -= A[right--];
new_average = rightaverg;
} else {
sum -= A[left++];
new_average = leftaverg;
}
if (result.min > new_average) {
result.min=new_average;
result.slice=left;
}
}
return result.slice;
}
解决方案
当当前切片在最左边和最右边的位置保持相同的数字时,您的算法就会出现问题。你要删除哪个号码?左边还是右边?
您当前的算法总是删除左边的数字,但这可能是不正确的。考虑:
int arr[4] = {1,9, 10, 1 };
// left average = (1 + 9 + 10) /3
// right average = (9 + 10 + 1) /3
左平均值和右平均值相同,因此您的代码删除了左边的数字并继续处理这个切片:
{9, 10, 1 };
这是错误的。现在您无法再达到正确的结果,即:
{1,9};
推荐阅读
- python - 如何通过整合烧瓶助手和对话流将图像发送到Skype
- security - DataStax cassandra 核心驱动依赖于易受攻击的 Guava-19
- java - 如何从其他类调用数据结构
- r - 在 r 中绘制具有多个 y 轴变量的图形
- php - 在一个 Mysql 查询中获取行的所有信息及其计数
- python - 在 python 中不能很好地使用 cv2.imwrite 函数
- angular - Angular 5 在新选项卡中打开特定模块而不加载所有其他模块
- reactjs - 如何在 redux 中使用 suspense
- java - 将一维字符串数组随机放入二维字符数组
- vb.net - 如何修复复制的文件夹名称