Solução por Sofhia Souza
Se pararmos para analisar, veremos que não faz sentido retirarmos um valor que está entre outros dois valores, afinal, se fizermos isso, a diferença entre e será maior do que a diferença que existia entre e e entre e , pois o vetor é crescente. Logo, é possível enxergar que devemos retirar os valores somente das pontas, de maneira que o maior valor seja o menor possível. Para fazermos isso, nós primeiro calculamos o vetor dos valores das diferenças (afinal, são esses os valores que interessam), e depois percorremos esse vetor, calculando o maior valor de todos os intervalos possíveis (se meu intervalo é da posição até a posição , significa que retirei todos os primeiros valores e todos os valores seguintes, sendo ).
Código para melhor entendimento:
#include <bits/stdc++.h> | |
#define inf 1000000000 | |
using namespace std; | |
int main() | |
{ | |
int n, k, vet[10010], dif[10010]; | |
cin >> n >> k; | |
for(int i = 1 ; i <= n ; i++) | |
{ | |
cin >> vet[i]; | |
if(i != 1) dif[i-1] = abs(vet[i]-vet[i-1]); //guardo o valor das diferenças no meu vetor dif | |
} | |
int resp = inf; | |
for(int i = 1 ; i <= k ; i++) | |
{ | |
int maior = 0; | |
for(int j = i ; j < (n-k+i-1) ; j++) maior = max(maior, dif[j]); //percorro todos os intervalos possiveis e pego o maior de cada um | |
resp = min(maior, resp); //pego o menor dos maiores | |
} | |
cout << resp << endl; | |
} |