Arquivo

Posts Tagged ‘codility’

Solução para o teste EQUI no Codility

Muitas pessoas estão fazendo testes / provas online no Codility como parte de entrevistas de emprego, principalmente, para vagas no exterior. Eu recomendo fazer os tutorias antes de tentar fazer qualquer teste oficial lá, pois somente assim, você vai ver como realmente é a prova, como rodar, testar, e dessa forma, sentir-se confortável com a mesma.

Eu efetuei o teste EQUI, que tem a solução em C aqui. Resolvi em JAVA. Recomendo tentar fazer antes de olhar a solução. Ai vai:


package br.com.ibm.tests;

public class Solution {

public static void main(String[] args) throws Exception {
Solution s = new Solution();
// int[] A = {2, 2, 2, 2, 2, 2, 2, 2, 2};
int[] A = { -7, 1, 5, 2, -4, 3, 0 };
System.out.print(s.solution(A));
}

public int solution(int[] A) {
int sub = 0;
int sum = 0;
int left = 0;
int right = 0;

if (A.length != -1) {
for (int i = 0; i < A.length; i++) {
sum = sum + A[i];
}
}

for (int i = 0; i < A.length; i++) {
sub = sub + A[i];
left = sub - A[i];
right = sum - sub;

if (left == right) {
return i;
}
}
return -1;
}

}

Uma solução mais performática e menos propensa a estouros utilizando BigInteger é:

package br.com.ibm.tests;

import java.math.BigInteger;

public class Solution {

public static void main(String[] args) throws Exception {
Solution s = new Solution();
// int[] A = {2, 2, 2, 2, 2, 2, 2, 2, 2};
int[] A = { -7, 1, 5, 2, -4, 3, 0 };
System.out.print(s.solution(A));
}

public int solution(int[] A) {
BigInteger sub = BigInteger.ZERO;
BigInteger sum = BigInteger.ZERO;
BigInteger left = BigInteger.ZERO;
BigInteger right = BigInteger.ZERO;

if (A.length != -1) {
for (int i = 0; i < A.length; i++) {
sum = sum.add(BigInteger.valueOf(A[i]));
}
}

for (int i = 0; i < A.length; i++) {
sub = sub.add(BigInteger.valueOf(A[i]));
left = sub.subtract(BigInteger.valueOf(A[i]));
right = sum.subtract(sub);

if (left.equals(right)) {
return i;
}
}
return -1;
}

}

Boa sorte.

Categorias:JAVA Tags:, , , ,