Tasks Details
**Task Score**
**Correctness**
**Performance**
` A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8`
` A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8`
**OK**
**OK**
stderr:
**
O(N)
**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**
**OK**

medium

Find the minimal average of any slice containing at least two elements.

100%

100%

100%

A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P < Q < N, is called a *slice* of array A (notice that the slice contains at least two elements). The *average* of a slice (P, Q) is the sum of A[P] + A[P + 1] + ... + A[Q] divided by the length of the slice. To be precise, the average equals (A[P] + A[P + 1] + ... + A[Q]) / (Q − P + 1).

For example, array A such that:

contains the following example slices:

- slice (1, 2), whose average is (2 + 2) / 2 = 2;
- slice (3, 4), whose average is (5 + 1) / 2 = 3;
- slice (1, 4), whose average is (2 + 2 + 5 + 1) / 4 = 2.5.

The goal is to find the starting position of a slice whose average is minimal.

Write a function:

function solution($A);

that, given a non-empty array A consisting of N integers, returns the starting position of the slice with the minimal average. If there is more than one slice with a minimal average, you should return the smallest starting position of such a slice.

For example, given array A such that:

the function should return 1, as explained above.

Write an ** efficient** algorithm for the following assumptions:

- N is an integer within the range [2..100,000];
- each element of array A is an integer within the range [−10,000..10,000].

Copyright 2009–2020 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

Solution

Programming language used PHP

Total time used 1 minutes

Effective time used 1 minutes

Notes
*not defined yet*

Task timeline

Code: 20:51:13 UTC,
php,
verify,
result: **Passed**

```
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($A) {
// write your code in PHP5.5
$min_avg = ( $A[0] + $A[1] ) / 2;
$index = 0;
$n = count( $A );
$nm = $n - 1;
for( $k = 0; $k < $nm; $k++) {
$a = ( $A[$k] + $A[$k+1] ) / 2;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
if( isset( $A[k+3] ) ) {
$a = ( $A[$k] + $A[$k+1] + $A[$k+2] ) / 3;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
}
}
$last = ( $A[$n-1] + $A[$n-2] ) / 2;
if( $last < $min_avg ) {
$index = $nm-1;
}
return $index;
}
```

Analysis

expand all
**Example tests**

1.

0.021 s

stderr:

PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Undefined offset: 7 in /tmp/user.php on line 21 Notice: Undefined offset: 7 in /tmp/user.php on line 21

Code: 20:51:31 UTC,
php,
verify,
result: **Passed**

```
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($A) {
// write your code in PHP5.5
$min_avg = ( $A[0] + $A[1] ) / 2;
$index = 0;
$n = count( $A );
$nm = $n - 1;
for( $k = 0; $k < $nm; $k++) {
$a = ( $A[$k] + $A[$k+1] ) / 2;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
if( isset( $A[k+2] ) ) {
$a = ( $A[$k] + $A[$k+1] + $A[$k+2] ) / 3;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
}
}
$last = ( $A[$n-1] + $A[$n-2] ) / 2;
if( $last < $min_avg ) {
$index = $nm-1;
}
return $index;
}
```

Analysis

expand all
**Example tests**

1.

0.022 s

PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 Notice: Use of undefined constant k - assumed 'k' in /tmp/user.php on line 20 PHP Notice: Undefined offset: 7 in /tmp/user.php on line 21 Notice: Undefined offset: 7 in /tmp/user.php on line 21

Code: 20:51:47 UTC,
php,
verify,
result: **Passed**

```
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($A) {
// write your code in PHP5.5
$min_avg = ( $A[0] + $A[1] ) / 2;
$index = 0;
$n = count( $A );
$nm = $n - 1;
for( $k = 0; $k < $nm; $k++) {
$a = ( $A[$k] + $A[$k+1] ) / 2;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
if( isset( $A[$k+2] ) ) {
$a = ( $A[$k] + $A[$k+1] + $A[$k+2] ) / 3;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
}
}
$last = ( $A[$n-1] + $A[$n-2] ) / 2;
if( $last < $min_avg ) {
$index = $nm-1;
}
return $index;
}
```

Analysis

Code: 20:51:57 UTC,
php,
verify,
result: **Passed**

```
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($A) {
// write your code in PHP5.5
$min_avg = ( $A[0] + $A[1] ) / 2;
$index = 0;
$n = count( $A );
$nm = $n - 1;
for( $k = 0; $k < $nm; $k++) {
$a = ( $A[$k] + $A[$k+1] ) / 2;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
if( isset( $A[$k+2] ) ) {
$a = ( $A[$k] + $A[$k+1] + $A[$k+2] ) / 3;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
}
}
$last = ( $A[$n-1] + $A[$n-2] ) / 2;
if( $last < $min_avg ) {
$index = $nm-1;
}
return $index;
}
```

Analysis

Code: 20:51:59 UTC,
php,
final,
score: **
100
**

```
// you can write to stdout for debugging purposes, e.g.
// print "this is a debug message\n";
function solution($A) {
// write your code in PHP5.5
$min_avg = ( $A[0] + $A[1] ) / 2;
$index = 0;
$n = count( $A );
$nm = $n - 1;
for( $k = 0; $k < $nm; $k++) {
$a = ( $A[$k] + $A[$k+1] ) / 2;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
if( isset( $A[$k+2] ) ) {
$a = ( $A[$k] + $A[$k+1] + $A[$k+2] ) / 3;
if( $a < $min_avg ) {
$index = $k;
$min_avg = $a;
}
}
}
$last = ( $A[$n-1] + $A[$n-2] ) / 2;
if( $last < $min_avg ) {
$index = $nm-1;
}
return $index;
}
```

Analysis summary

The solution obtained perfect score.

Analysis

Detected time complexity:

expand all
**Correctness tests**

1.

0.020 s

2.

0.019 s

3.

0.020 s

4.

0.020 s

1.

0.020 s

2.

0.020 s

1.

0.020 s

1.

0.021 s

1.

0.021 s

2.

0.021 s

3.

0.021 s

expand all
**Performance tests**

1.

0.021 s

1.

0.124 s

2.

0.105 s

1.

0.129 s

1.

0.130 s

2.

0.131 s

3.

0.132 s

1.

0.125 s

2.

0.093 s

The PDF version of this report that may be downloaded on top of this site may contain sensitive data including personal information. For security purposes, we recommend you remove it from your system once reviewed.