给出了一个由N个整数组成的非空零索引数组A。一对0(P <Q <N
<N)的整数(P,Q)称为数组A的切片(请注意,切片包含至少两个元素)。切片的平均值(P,Q)是A [P] + A [P +1] + … + A
[Q]的总和除以切片的长度。确切地说,平均值等于(A [P] + A [P + 1] + … + A [Q])/(Q − P +1)。
例如,数组A这样:
A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8
包含以下示例切片:
目的是找到平均值最小的切片的起始位置。
编写一个函数:
class Solution { public int solution(int[] A); }
给定一个由N个整数组成的非空零索引数组A,它以最小的平均值返回切片的起始位置。如果有多个具有最小平均值的切片,则应返回该切片的最小起始位置。
例如,给定数组A使得:
A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8
如上所述,该函数应返回1。
假使,假设:
复杂:
输入数组的元素可以修改。
这是我最好的解决方案,但显然在时间复杂度方面不是最佳的。
有任何想法吗?
public int solution(int[] A) {
int result = 0;
int N = A.length;
int [] prefix = new int [N+1];
for (int i = 1; i < prefix.length; i++) {
prefix[i] = prefix[i-1] + A[i-1];
}
double avg = Double.MAX_VALUE;
for (int i = 1; i < N; i++) {
for (int j = i+1; j <=N; j++) {
double temp = (double)(prefix[j]-prefix[i-1]) /(double)(j-i+1);
if (temp < avg) {
avg = temp;
result = i-1;
}
}
}
return result;
}
https://codility.com/demo/results/demo65RNV5-T36/
我几天前发布了这个:
看一下这个:
http://codesays.com/2014/solution-to-min-avg-two-slice-by-
codility/他们在那里详细解释了为什么他们的解决方案有效。我自己还没有实现它,但是我一定会尝试的。
希望能帮助到你!
但我刚刚看到它已被主持人删除。他们说链接无效,但我只是尝试了一下,效果很好。我再次发布它,希望可以验证该链接是否正确。
现在,我还可以根据之前提供的代码分析链接提供实现:https ://codility.com/demo/results/demoERJ4NR-
ETT/
class Solution {
public int solution(int[] A) {
int minAvgIdx=0;
double minAvgVal=(A[0]+A[1])/2; //At least two elements in A.
double currAvg;
for(int i=0; i<A.length-2; i++){
/**
* We check first the two-element slice
*/
currAvg = ((double)(A[i] + A[i+1]))/2;
if(currAvg < minAvgVal){
minAvgVal = currAvg;
minAvgIdx = i;
}
/**
* We check the three-element slice
*/
currAvg = ((double)(A[i] + A[i+1] + A[i+2]))/3;
if(currAvg < minAvgVal){
minAvgVal = currAvg;
minAvgIdx = i;
}
}
/**
* Now we have to check the remaining two elements of the array
* Inside the for we checked ALL the three-element slices (the last one
* began at A.length-3) and all but one two-element slice (the missing
* one begins at A.length-2).
*/
currAvg = ((double)(A[A.length-2] + A[A.length-1]))/2;
if(currAvg < minAvgVal){
minAvgVal = currAvg;
minAvgIdx = A.length-2;
}
return minAvgIdx;
}
}
我正试图找到一个子阵列最小切片的余数问题的解决方案,并且我已经设计了一个使用Kadane算法的修改版本的解决方案。我目前已经拿到了90/100,并且设法通过了O(n)的几乎所有考试。但是我好像过不了“medium_range,increasing,decreasing(legth = ~ 100)and small functional,got 5 expected 3”,我也不知道为什么。这可能
给出了一个由N个整数组成的非空零索引数组。一对整数(P,Q),如0≤ P 包含以下示例片段: 切片(1,2),其平均值为(2 2)/2=2 目标是找到平均值最小的切片的起始位置。 写一个函数: 即,给定一个由N个整数组成的非空零索引数组A,返回具有最小平均值的切片的起始位置。如果有多个具有最小平均值的切片,您应该返回这样一个切片的最小起始位置。 例如,给定数组A,这样: 如上所述,函数应该返回1。
问题内容: 如何在Rails 3中创建按时间片聚合的活动关系查询? 我想建立一个查询,该查询每隔n分钟可以返回具有特定名称的计数器的每个样本的最小值,最大值,平均值,总和,计数。 问题答案: 不幸的是,我从未使用过Postgres,因此该解决方案可在MySQL中使用。但是我认为您可以找到Postgres类似物。 用法 等等
完整的问题是:最小平均两层代码 我不明白为什么我的代码不起作用。 我知道正确答案,但我找不到我的代码的反例:
问题内容: 我在SQLite中有一个名为param_vals_breaches的表,如下所示: 我想编写一个查询,以小时为基础,向我显示一个特定的队列(例如“ a ”),每个队列的平均 参数 为 param_val 和 违规 数。因此,转置数据以获得如下所示的内容: 这可能吗?我不确定该怎么做。谢谢! 问题答案: SQLite没有PIVOT函数,但是您可以将聚合函数与表达式结合使用,以将行变成列: