Q:

Li has planned a bike tour through the mountains of Switzerland. His tour consists of N checkpoints, numbered from 1 to N in the order he will visit them. The i-th checkpoint has a height of Hi

0

Bike Tour Google Kick Start Round B Problem 1 Solution

Li has planned a bike tour through the mountains of Switzerland. His tour consists of N checkpoints, numbered from 1 to N in the order he will visit them. The i-th checkpoint has a height of Hi.

A checkpoint is a peak if:

It is not the 1st checkpoint or the N-th checkpoint, and

The height of the checkpoint is strictly greater than the checkpoint immediately before it and the checkpoint immediately after it.

Please help Li find out the number of peaks.

Input:

The first line of the input gives the number of test cases, T. T test cases follow. Each test case begins with a line containing the integer N. The second line contains N integers. The i-th integer is Hi.

Output:

For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is the number of peaks in Li's bike tour.

Constraints:

1 ≤ T ≤ 100.
1 ≤ Hi ≤ 100.
3 ≤ N ≤ 100.

Example:

Input:
4
3
10 20 14
4
7 7 7 7
5
10 90 20 90 10
3
10 3 10

Output:
Case #1: 1
Case #2: 0
Case #3: 2
Case #4: 0

All Answers

need an explanation for this answer? contact us directly to get an explanation for this answer

This is a trivial problem where we need to check each element as per its constraints. So an element is peak if it's not the corner element and it's strictly greater than its neighbours. So the algorithm would be-

Let n=number of elements and peak be number of peaks
  1. Peak =0 initially
  2. for i 0 to n-1
        if(i==0 or i==n-1)
            Skip this as it's corner elements and can't be peak
        Else if(arr[i]>arr[i-1] and arr[i]>arr[i+1])
            Increment peak
        End if
    End for
    
  3. Peak is the final result

What can be done as part of optimizing further?

One think we can do is instead of checking each and every element to be a peak, we can skip few elements. If an element(arr[i]) is peak then we can skip the immediate right neighbour(arr[i+1]) as that can’t be peak as per constraints. This can be done in terms of optimization, but still will lead to O(n) complexity.

Since the algo is pretty intuitive and self-explanatory I am not going for dry run. However you can do a dry run for better understanding.

C++ Implementation

#include <bits/stdc++.h>
using namespace std;

#define endl "\n"

int arr[100];

int main()
{
    int test_case;
    cin >> test_case;
 
    for (int tc = 1; tc <= test_case; tc++) {
        int n;
 
        cin >> n;
 
        int count = 0;
 
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
        for (int i = 0; i < n; i++) {
            if (i != 0 && i != n - 1 && arr[i] > arr[i - 1] && arr[i] > arr[i + 1])
                count++;
        }

        cout << "Case #" << tc << ": " << count << endl;
    }
 
    return 0;
}

Output:

4
3
10 20 14
Case #1: 1
4
7 7 7 7
Case #2: 0
3
10 3 10
Case #3: 0
5
10 90 20 90 10
Case #4: 2

need an explanation for this answer? contact us directly to get an explanation for this answer

total answers (1)

This question belongs to these collections

Similar questions


need a help?


find thousands of online teachers now