2022-01-02 leetcode 390. 消除游戏

390. 消除游戏

难度中等163 收藏 分享 切换为英文 接收动态 反馈

列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:

  • 从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。
  • 重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。
  • 不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。

给你整数 n ,返回 arr 最后剩下的数字。

image.png

题解

错误的题解(超时了)
【看了别人的题解,他们都没有直接构造这个数组,而是从侧面计算数组的规律,节省了大量的时间和空间】

class Solution:
    def left(self, arr):
            return [j for i,j in enumerate(arr) if i % 2 == 1]
    def right(self, arr):
        if len(arr) % 2 == 0:
            return [j for i,j in enumerate(arr) if i % 2 == 0]
        else:
            return [j for i,j in enumerate(arr) if i % 2 == 1]
    def lastRemaining(self, n: int) -> int:
        
        arr = list(range(1, n + 1))
        while len(arr) != 1:
            # print('b l:', arr)
            arr = self.left(arr)
            if len(arr) == 1:
                return arr[0]
            # print('b r:', arr)
            arr = self.right(arr)            
            if len(arr) == 1:
                return arr[0]   
        return arr[0]

官方题解

消除游戏 - 消除游戏 - 力扣(LeetCode) (leetcode-cn.com)

class Solution:
    def lastRemaining(self, n: int) -> int:
        a1 = 1
        k, cnt, step = 0, n, 1
        while cnt > 1:
            if k % 2 == 0:  # 正向
                a1 += step
            else:  # 反向
                if cnt % 2:
                    a1 += step
            k += 1
            cnt >>= 1
            step <<= 1
        return a1

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/elimination-game/solution/xiao-chu-you-xi-by-leetcode-solution-ydpb/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
image.png

image.png

约瑟夫环方法

【宫水三叶】约瑟夫环运用题 - 消除游戏 - 力扣(LeetCode) (leetcode-cn.com)

image.png

image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • to-do:看一下别人写的题解 https://github.com/981377660LMT/algorithm...
    winter_sweetie阅读 4,233评论 1 0
  • 前提知识: <<表示左移移,不分正负数,低位补0; >>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;...
    Swen_9826阅读 3,414评论 0 0
  • 381. O(1) 时间插入、删除和获取随机元素 - 允许重复[https://leetcode-cn.com/p...
    1nvad3r阅读 1,283评论 0 0
  • 背包问题进阶版,商品可无限选择直至选择到某固定金额 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整...
    Cipolee阅读 2,394评论 0 0
  • (Since 2020.10.14-2021.3.10) LeetCode刷题笔记,共两百多题,记录整理如下: 动...
    周恩国的学习笔记阅读 4,223评论 0 1

友情链接更多精彩内容