- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定一个正面和反面的序列,我想计算正面数量不少于反面数量的重要子串的数量。我想在 O(NlogN) 时间内实现。
示例输入:[ 'H', 'T', 'H', 'T', 'T', 'H']
示例输出:
11
解释:
{H} {H} {H}
{H, T} {T, H} {H, T} {T, H}
{H, T, H}
{H, T, H, T}
{H, T, T, H}
{H, T, H, T, T, H}
我相信我当前的算法是 O(N^2)。我递归地解决了这个问题,迭代了在两端切片的硬币列表。
这是我目前的算法。如何实现 O(NLogN) 时间?
def count_sequences( data ):
print go(range(0,len(data)),data)
seen = set()
def go(rang,data):
if tuple(rang) in seen: return 0
seen.add(tuple(rang))
h = 0
summ = 0
if len(rang)==0: return 0
for i in rang:
if data[i] == 'H': h += 1
summ += go(rang[1:],data)
summ += go(rang[:-1],data)
if len(rang) == 1:
if h ==1: return 1
else: return 0
if h > (len(rang)-1)/2 :
return 1 + summ
else: return summ
最佳答案
这是一个复杂度为 O(n) 的解决方案。
想象一下,您的数组中没有 H 和 T,而是 1 和 -1。这将问题简化为计算非负和子数组的数量。这是一个已知问题,可以通过计算累积数组并找到反转次数来解决。
这可以在 O(n^2) 中简单地计算,搜索对 i < j,其中 A[i]>A[j]。可以使用合并排序变体将其优化为 O(n log n)。
但特别是在这种情况下,数组中的值最多可以为 n,并且连续值的绝对差正好为 1,因此我们可以创建一个算法,在 O(n) 中动态计算这些反转:
def solve(A):
count = 0
accum = 0
total = 0
seen = {0: 1}
for i, element in enumerate(A):
if element == 'H':
count += 1
accum -= seen.get(count, 0)
else:
accum += seen.get(count, 0)
count -= 1
seen[count] = seen.get(count, 0) + 1
total += (i + 1 - accum)
return total
print solve([ 'H', 'T', 'H', 'T', 'T', 'H' ])
print solve([ 'T', 'H', 'H', 'H', 'T' ])
该算法主要基于one I've read here .
关于python - 从一串硬币抛掷中计算出少数反面的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27884685/
我目前正在做一个项目,试图开发一种用于 P2P 能源交易的货币和模型,其中每产生一千瓦时的可再生能源就会向该生产商类型转换一枚硬币。我的问题是关于销毁智能合约中的代币。 所有与我的项目类似的当前实现都
在没有Maps帮助的情况下通过Memoization解决问题,由于读取文件的方法,我得到了TLE,根据我的说法,这不应该是这种情况。可能的原因是什么? 这是给出 AC - http://ideone.
考虑下面这段伪代码,其中d是面额值数组,k是面额数,n是要进行更改的金额。 Change(d; k; n) 1 C[0] 我真的不明白这部分,你为什么要用它,谁能给我解释一下! 最佳答案 为了回答
我正在尝试在我的网站上实现 Coin Slider (http://workshop.rs/2010/04/coin-slider-image-slider-with-unique-effects/)
我有使用硬币 slider 的画廊 var $jq = jQuery.noConflict(); $jq(window).load(function() { var imhei
我使用了从该站点提取的硬币 slider http://workshop.rs/projects/coin-slider/ .它现在自动滚动并仅在悬停时显示上一个和下一个。我需要禁用自动滚动并正常显示
我的问题是一道CodeFu练习题(2012 round 2 problem 3)。它基本上归结为将整数数组分成两个(几乎)相等的两半并返回两者之间可能的最小差异。我在下面包含了问题描述。如评论中所述,
我们的老师要求我们制作一 jar 硬币,用来计算我们有多少便士、一毛钱等,然后给出总金额。 这是他希望我们使用的模板 https://online.pcc.edu/content/enforced/7
我正在尝试使用币安币 future 的 api 下载 BTC/USD 永续 future 的历史价格数据,具体来说,我想使用 this endpoint .但是,我找不到必须为 BTC/USD 指定的
我上周刚开始学习计算机科学,我们得到了一个名为“硬币”的工作表,其中我必须找出一组硬币中有多少个 25 美分、10 美分、5 美分和 10 便士。我遇到了很多麻烦,并收到了该错误。这是我的代码 pac
我正在构建一些使用消耗性硬币的测验。我使用 NSUserDefault 来保存设备上的硬币及其工作。我还在 qiuz 中使用 CloudKit 处理数据。 不麻烦的是,如果用户切换设备如何恢复硬币?有
我是一名优秀的程序员,十分优秀!