leetcode jogo 390 eliminação

Eliminar todas as linhas! Quem era o último sobrevivente?

O significado de problemas como segue:
Dada uma lista de números inteiros de 1 a n encomendados.
Em primeiro lugar, da esquerda para a direita, começando com o primeiro dígito, excluir todos os outros dígitos, até o final da lista.
O segundo passo, os restantes números, da direita para a esquerda, começando com o dígito penúltimo, cada dígito para eliminar, até o início da lista.
Nós repetimos estas duas etapas, da esquerda para a direita e da direita para a esquerda, alternadamente, até que apenas um número.
Retorna uma lista de comprimento n, os últimos números restantes.

Exemplo:
Entrada:
. N- = 9,
1 2 3 4 5 6 7 8 9
2 4 6 8
26
6
de saída:
6

Em primeiro lugar, observar e analisar a amostra de
Kankan que está leis não fez

O primeiro 13579 intervalo número 2 é suprimido o primeiro
48 segundo intervalo do primeiro número não é excluído 4
2 terceiro intervalo é eliminado primeiro número 8
...

  1. N-th sub-intervalo de 2 ^ n
  2. Da direita para a esquerda para excluirO tempo
    quando o número restante denúmero ímparO primeiro número será eliminado
    quando o número restante demesmo O primeiro número não serão excluídos
  3. Cada terminar de remover
    o número restantepermanecer / = 2
projeto de algoritmos:

O primeiro número de res marcar o início
passo de marcação cada passo
left2right representado direção de passagem

Da esquerda para a direita,
o primeiro número será eliminado - atualizações RES
de direita para a esquerda
quando o número restante denúmero ímparO primeiro número será eliminado - RES atualizados
quando o número restante demesmoO primeiro número não serão excluídos - RES permanece inalterado

Cada travessia primário PASSO 2 =
left2right negada

Código é a seguinte :

class Solution {
public:
    int lastRemaining(int n) {
        bool left2right = true;
        int res = 1, step = 1, remain = n;
        while (remain > 1) {
            if (left2right || remain % 2 == 1) res += step;
            remain /= 2;
            step *= 2;
            left2right = !left2right;
        }
        return res;
    }
};
Publicado 34 artigos originais · ganhou elogios 0 · Visualizações 591

Acho que você gosta

Origin blog.csdn.net/Luyoom/article/details/103653120
Recomendado
Clasificación