0

Logica

#JavaScript
Rogerio Filho
Rogerio Filho

Digamos que você tenha um array para o qual o elemento i é o preço de uma determinada ação no dia i. Se você tivesse permissão para concluir no máximo uma transação (ou seja, comprar uma e vender uma ação), crie um algoritmo para encontrar o lucro máximo. Note que você não pode vender uma ação antes de comprar.

Exemplo: Input: [7,1,5,3,6,4] Output: 5 (Comprou no dia 2 (preço igual a 1) e vendeu no dia 5 (preço igual a 6), lucro foi de 6 – 1 = 5

Input: [7,6,4,3,1] Output: 0 (Nesse caso nenhuma transação deve ser feita, lucro máximo igual a 0)


alguém me da uma luz, me ajuda pfv!!


5
88

Comentários (5)

0
R

Reyson Nascimento

07/02/2021 01:26

Boa noite Rogerio!


A ideia nesse caso é como o Wellington falou anteriormente. Você compra a ação pelo menor valor e vende pelo maior.

1) Validar a seguinte regra: Não pode vender uma ação antes de comprar.

Como fazer:

1.a) Percorrer o vetor e achar o menor valor e sua posicao(index).

1.b) Armazenar o valor encontrado na variável menorValor = vetor[i] e posicaoMenorValor = i.

1.c) Caso posicaoMenorValor esteja na última posicao do vetor então Nesse caso nenhuma transação deve ser feita, lucro máximo igual a 0

2) Caso posicaoMenorValor NÃO esteja na última posicao do vetor então

2.a) Inicializar um novo vetor começando do index = posicaoMenorValor

2.b) Armazenar o valor encontrado na variável maiorValorAposCompra = vetor[j] e posicaoMaiorValorAposCompra = j.

2.c) Mostrar o Lucro Máximo = maiorValorAposCompra - menorValor.


Acho que é isso! Olha se faz sentido para você.


Best regards!



0
W

Wellington Santos

05/02/2021 21:32

Observe que na vetor do exemplo, os valores estão desordenados e o que você deve utilizar está ordenado de forma decrescente. A ideia ai é você iniciar o vetor verificando todos os valores, observando a diferença entre eles.

Sempre que encontrar que a diferença entre dois valores é maior do que a que você encontrou anteriormente, deve-se armazenar a posição deles.

Como o vetor que você deve utilizar está em ordem decrescente e esses valores também representam os dias, a diferença sempre será negativa.

Entendeu a ideia?


Eu poderia colocar um exemplo de algoritmo, porém ficaria chato tirar o seu prazer de pensar kkkkkkkkkkkkk

0
G

Gabriel

05/02/2021 20:19

Deixa eu ver seu código, só pra ter uma ideia do que pode estar dando errado

0
Rogerio Filho

Rogerio Filho

05/02/2021 19:51

Negócio é que não tô conseguindo montar pra resolver...já fiz alguns exercicios porém deu um branco geral

e já tentei algumas coisas mas só da erro erro erro kkkk

0
G

Gabriel

05/02/2021 19:09

Eu não sei bem, mas acredito que você possa fazer comparando o elemento i(a posição atual sendo percorrida no array) com todos os outros elementos que vem depois dessa posição, a subtração entre o elemento que vem depois de "i" e o próprio "i" deve ser no mínimo maior que 0, pois significa que houve lucro. Ex: No primeiro exemplo você compra no primeiro elemento(o 7), logo não é possível ter lucro com essa ação pois todos os elementos que vem depois de 7 são MENORES que ele, a "melhor" opção para esse elemento seria comprar em 7 e vender em 6, tendo um prejuízo de 6-7= -1. Já no caso do segundo elemento(1), você pode comprar nele e logo em seguida já percebe um lucro, pois depois de 1 vem o 5, 5-1=4, 4 é maior que 0, logo você pode armazenar esse valor em uma variável e deixar ele lá para ser comparado em seguida, caso alguma outra ação gere um lucro maior; depois vem o 3, 3-1=2, houve lucro porém não foi o melhor; depois vem o 6, 6-1=5, houve lucro e foi melhor que o atual 4, e assim por diante...

Desenvolvedor

Brasil