IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2022.01.02 Leetcode 每日一题 消除游戏 -> 正文阅读

[数据结构与算法]2022.01.02 Leetcode 每日一题 消除游戏

1、题目消除游戏

列表 arr 由在范围 [1, n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:
从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。
重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。
不断重复这两步,从左到右和从右到左交替进行,直到只剩下一个数字。
给你整数 n ,返回 arr 最后剩下的数字。

示例 1:
输入:n = 9
输出:6
解释:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = [2, 4, 6, 8]
arr = [2, 6]
arr = [6]

示例 2:
输入:n = 1
输出:1
提示:
1 <= n <= 10^9

2、分析

经过分析,我们可以发现

  1. 对于长度为n的数列,经过删除,其长度变为 ? x / 2 ? \lfloor {x/2} \rfloor ?x/2?
  2. 每一轮删除之后,剩下的都是等差数列。而等差数列可以用 a 0 a_0 a0?和公差来表示, a n a_n an?可以通过 a 0 a_0 a0?和公差以及队列长度表示。所以我们只需要表示出每轮之后, a 0 a_0 a0?和公差及数列长度的变化即可。
  3. 对于从左往右的删除,原来的 a 0 a_0 a0?一定会被删除,而新的 a 0 a_0 a0?就等于旧的 a 0 a_0 a0?+公差。对于从右向左的删除,如果长度为偶数个,那么 a 0 a_0 a0?不会被删除,否则会被删除,新的值为旧的 a 0 a_0 a0? + 公差。

3、题解

class Solution {
public:
    int lastRemaining(int n) {
       //a0,公差,轮数初始化
       int begin = 1, step = 1,cnt = 1;
       while(n != 1)
       {
           if(cnt % 2) begin += step;
           else if(n % 2) begin += step;
           //公差每轮变大一倍
           step += step;
           //数列长度缩短一倍
           n >>= 1;
           //删除轮数+1
           cnt ++;
       }
       return begin;
    }
};

4、总结

  1. 对于等差数列可以用 a 0 a_0 a0?、公差、长度来进行表示,而无需处理整个队列的所有元素。一开始进行模拟的时候超时了。
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:22:02  更:2022-01-03 16:24:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:46:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码