zoukankan      html  css  js  c++  java
  • LeetCode 390. Elimination Game

    原题链接在这里:https://leetcode.com/problems/elimination-game/

    题目:

    There is a list of sorted integers from 1 to n. Starting from left to right, remove the first number and every other number afterward until you reach the end of the list.

    Repeat the previous step again, but this time from right to left, remove the right most number and every other number from the remaining numbers.

    We keep repeating the steps again, alternating left to right and right to left, until a single number remains.

    Find the last number that remains starting with a list of length n.

    Example:

    Input:
    n = 9,
    1 2 3 4 5 6 7 8 9
    2 4 6 8
    2 6
    6
    
    Output:
    6

    题解:

    Only record the head, while n > 1 keep loop.

    When n == 1, return head.

    We need to move head in 2 conditions. One is now it is left to right, the other is now it is right to left and remaining n is odd.

    We need to move head by step. Each time step *= 2 as n /= 2.

    Time Complexity: O(logn).

    Space: O(1).

    AC Java:

     1 class Solution {
     2     public int lastRemaining(int n) {
     3         boolean lr = true;
     4         int head = 1;
     5         int step = 1;
     6         while(n > 1){
     7             if(lr || n % 2 == 1){
     8                 head += step;
     9             }
    10             
    11             n /= 2;
    12             step *= 2;
    13             lr = !lr;
    14         }
    15         
    16         return head;
    17     }
    18 }
  • 相关阅读:
    stdin stdout stderr
    stat
    ssh-keyscan
    START TRANSACTION
    ssh-keygen
    ssh-agent
    ssh-add
    虚拟化之lxc
    Web 在线文件管理器学习笔记与总结(1)初始文件以及获取首层目录信息
    Java实现 LeetCode 97 交错字符串
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12324682.html
Copyright © 2011-2022 走看看