博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】390. Elimination Game
阅读量:7213 次
发布时间:2019-06-29

本文共 1235 字,大约阅读时间需要 4 分钟。

题目如下:

解题思路:对于这种数字类型的题目,数字一般都会有内在的规律。不管怎么操作了多少次,本题的数组一直是一个等差数列。从[1 2 3 4 5 6 7 8 9] -> [2 4 6 8] -> [2 6] -> [6]这个序列中,我们可以得到公差分别是1,2,4。如果我们把n扩大一点,打印出其中每一步剩余的数组序列,我们很容易发现公差是pow(2,n)次方,发现了这个规律后,一切就水到渠成了。接下来,我们只要记录每一次操作后剩下序列的low,high以及序列的长度,直到最后序列只有一个元素即可。

代码如下:

class Solution(object):    def lastRemaining(self, n):        """        :type n: int        :rtype: int        """        if n == 1:            return 1        times = 1        low = high = None        length = n        multiple = None        while True:            if times == 1:                length = length / 2                low = 2                if n % 2 == 0:                    high = n                else:                    high = n -1                multiple = pow(2, times)            elif times % 2 == 0:                length = length / 2                high -= multiple                multiple = pow(2, times)                low = high - multiple*(length-1)            else:                length = length / 2                low += multiple                multiple = pow(2, times)                high = low + multiple * (length - 1)            times += 1            if low >= high:                return high

 

转载于:https://www.cnblogs.com/seyjs/p/8934453.html

你可能感兴趣的文章
在ubuntu12.04上使用华为et127 3g上网卡
查看>>
存储类型
查看>>
Maven多模块项目中应用maven-tomcat-plugin热部署
查看>>
jQuery Callbacks
查看>>
判断安卓程序是否高危程序。
查看>>
有关YARN/MRv2 相关
查看>>
4.2 开发者选项--"电源错误报告"的适配
查看>>
Android <Android应用开发实战> 学习总结杂项
查看>>
ORACLE函数大全
查看>>
【Linux_Fedora_应用系列】_3_如何利用Smplayer播放WMV格式的文件
查看>>
错误3 error C3859: 超过了 PCH 的虚拟内存范围;请使用“-Zm120”
查看>>
树的子结构
查看>>
通过Camera进行拍照
查看>>
hdu1867之KMP
查看>>
Java中System.getProperty()的参数
查看>>
pthread_cond_wait() 函数的使用
查看>>
Crypto API
查看>>
读书笔记2013第10本:《学得少却考得好Learn More Study Less》
查看>>
【c++】指针参数是如何传递内存的
查看>>
装饰模式(Decorator Pattern)--------结构型模式
查看>>