0


LeetCode - 390 -消除游戏 - Java - 细喔

文章目录

题目

在这里插入图片描述


题目解析

n 表示当前有n个数字(1 ~ n),然后就是开始删除数字。
先 正向删除:删除一个数据,下一个不删,以此规律,来对这组数据进行删除。
然后 反向删除 :也是一样,删除一个数据,下一个不删。只不过是反着来的。
正反向删除,交替删除。
直到 这组数据,剩余 1 个数据。将其返回。( 如果 n 一开始 就是 1,就直接返回 1)


解题思维

在这里插入图片描述


代码实现过程(因为细节需要)

在这里插入图片描述


最后附上代码

classSolution{publicintlastRemaining(int n){int firstNum =1;// 删除后,数组的第一个元素int k =0;// 删除次数,k == 0表示这组数据没有被删除任何元素int tolerance =1;// 记录公差,无论正向还是反向删除,每删除一次,公差变为自身的两倍int curNum = n;//记录数字个数while(curNum >1){if(k %2==0){//以偶数为 正向删除标准,奇数为反向删除标志.而且第一次删除是正向删除。
                firstNum += tolerance;}else{// 奇数 为反向删除,需要判断奇偶性
                firstNum =(curNum %2==0)? firstNum : firstNum + tolerance;}
            k++;
            tolerance = tolerance <<1;
            curNum = curNum >>1;}return firstNum;}}

代码细节

公差 和 数据个数 利用 二进制移位,进行 2倍扩大 和 缩小。
在这里插入图片描述
这个比较基础,我就粗略的讲一下,因为 java 的底层部分,涉及不多。毕竟是站在巨人的肩膀。
在这里插入图片描述

标签: leetcode java 算法

本文转载自: https://blog.csdn.net/DarkAndGrey/article/details/122278886
版权归原作者 Dark And Grey 所有, 如有侵权,请联系我们删除。

“LeetCode - 390 -消除游戏 - Java - 细喔”的评论:

还没有评论