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:, , , ,

Improve programmer Skills

As a programmer, I’m always looking for challenges. Solving “random” problems can always make us learn more and being more smart, knowing more structures and patterns.

For those who want to improve your skills as a programmer, I found a good list, with explanations and challenges at https://codility.com/programmers/

It’s free. You can play a lot!

Enjoy!

Introdução a Big Data e Apache Solr

Para quem está interessado em Big Data e além disso quer algo prático utilizando Apache Solr, disponibilizo um conjunto de slides que podem ser utilizados por Estudantes, Professores e profissionais. Usem e distribuam a vontade!

Palestra FLISOL na FEMA em Assis – SP / Slides

Pessoal, aqui estão os slides que fiquei de compartilhar da palestra ministrada na FEMA/ASSIS – SP, no evento FLISOL, no ultimo dia 16 de abril. Enjoy!

Gostaria de agradecer a organização pelo convite e parabenizar a todos pela iniciativa e participação. Em tempo de crise, o melhor que temos a fazer é continuar dando duro e compartilhar conhecimento para que todos crescam juntos!

Categorias:Academic Initiative

Utilizando o Startup Order no WebSphere

Muitas vezes vamos fazer o deploy de um novo release de uma aplicação em um servidor de aplicações, e para fazer isso, simplesmente sobrescrevemos a aplicação anterior (update). Isso não é muito interessante do ponto de vista de um rollback. Se você precisar voltar para a antiga versão, pode demorar um pouco mais.

Uma forma interessante para contornar isso é utilizar o Startup Order.

Eu sugiro uma boa prática em nossos processos de deploy: Ao fazer o deploy de um novo release para sua aplicação, você deve dar um nome diferente a ela, por exemplo: “Aplicacao_X_release_2”, e setar o Startup Order (stating weight em versões antigas) para 1, como na figura (screen de versão Antiga do WAX – 7):

Utilizando o Starting Weight no WebSphere

Versão mais recente (8 e 8.5):

Selection_385

Após isso, devemos ir no release anterior, e setar o starting weight/startup order para algo maior que um.

Assim, reiniciamos o servidor de aplicação, e quando ele iniciar, vai levantar a aplicação com o menor peso, pois ao tentar levantar a aplicação com o peso maior, o servidor vai verificar que o context root já está em uso por outra aplicação.

Esta é uma ótima prática para evitarmos operações de rollback demoradas. Se tivermos algum problema no novo release, podemos simplesmente fazer a troca de pesos, ou seja, colocar 1 no release mais antigo e 100 no novo release, assim, reiniciar o servidor de aplicação, e o mesmo, iniciará o antigo release, sem problemas!

Enjoy!

Field x Facet

Many people who start to work with Apache Solr or Watson Explorer have the first primary doubt about What is the difference from Field against Facet.

We can simple define that the field represent the indexed data, and the facet its such a GROUP, combined usually by volume. As described at Solr documentation “faceting is the arrangement of search results into categories based on indexed terms”.

Its possible to configure FACETS with many options like sort, searchable, etc. Each product have its possibilities.

Think that when you perform a query, you will use FACETs in the “Where”, something like this:

Select FIELDS from COLLECTION where FACET MY_FACET = ‘dummy’;

This will make you understand better!

Enjoy!

Enabling Wildcard in a collection at Watson Explorer

Eventually we need to enable search using wildcards like * for a collection at Watson Explorer. For sure this can make our queries consume more CPU and Memory, you can think comparing a query that perform a “select … where field = ‘XXX'” against a query that perform a “select …. where field like ‘*XXX'” (pseudo code). What will be faster? So, think carefully before enable this!

To enable, go to your collection configuration -> Indexing -> Term expansion support (4)  , and check Generate Dictionaries.

Selection_356

For more information, check here and here.

Enjoy!

 

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 477 outros seguidores