我偶然发现了以下问题:

给定带有整数的卡片的有序列表(例如,[1,24,3,4,5]),两张 玩家轮流打牌.第一名选手先来.无论何时 玩家拿到一张偶数的牌,他们颠倒了 剩下的牌,游戏继续.当所有的牌都被拿走时, 他们计算他们的总和.金额较大的玩家获胜.如果 打成平局,1号玩家获胜.编写一个程序,给定以下顺序 纸牌,输出胜利者.

我用指针来完成这道题.创建两个指针i = 0j = n-1,其中n是牌的总数.创建另一个指针k来跟踪您所在的位置.每当我遇到一张偶数牌,我就会在ij之间切换.

我编写了一个可以工作的函数,但它需要O(N),因为我确实需要遍历整个列表.有没有更快的方法来做这件事?

推荐答案

你所说的"指针"肯定指的是"索引".由于数值不受限制,任何一张牌都可能改变游戏规则,任何一张牌都可能是成对的,因此你没有捷径.你需要有sumPlayer1,sumPlayer2,都是用0初始化的,开始读牌,每次你读一张牌,你把它的值加到适当的玩家.

你从左边开始读牌,当你遇到第一对数字时,你从右边开始读,直到你找到第一对,依此类推,根据游戏规则来回切换,直到你用完所有的牌.

由于这将读取所有的卡片,所以您将拥有一个线性算法,就像您已经拥有的那样,并且您的复杂性不能低于该算法.如果你有一些限制或约束,那么我们可能会优化算法,但在没有进一步信息的情况下,线性是你能得到的最好的.

Python相关问答推荐

symy.分段使用numpy数组

opencv Python稳定的图标识别

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

由于NEP 50,向uint 8添加-256的代码是否会在numpy 2中失败?

将两只Pandas rame乘以指数

管道冻结和管道卸载

当递归函数的返回值未绑定到变量时,非局部变量不更新:

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

当点击tkinter菜单而不是菜单选项时,如何执行命令?

当我try 在django中更新模型时,模型表单数据不可见

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

用渐近模计算含符号的矩阵乘法

当条件满足时停止ODE集成?

为什么Python内存中的列表大小与文档不匹配?

pandas fill和bfill基于另一列中的条件

在用于Python的Bokeh包中设置按钮的样式

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间

当我定义一个继承的类时,我可以避免使用`metaclass=`吗?

Scipy差分进化:如何传递矩阵作为参数进行优化?