- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设您有一个特殊的键盘,所有键都排在一行中。键盘上的字符布局由长度为 26 的字符串 S1 表示。S1 的索引从 0 到 25。最初索引为 0。要键入字符,我们需要移动所需字符的索引。将索引从 i 移动到 j 所花费的时间是 |j-i|哪里||是绝对值。
给定字符串 s1 和 s2,描述输入字符串 s2 所花费的时间。
给定两个字符串 S1 和 S2,其中 S1 = abcdeghijklmnopqrstuvwxyz
s2=cba
并从索引 0 ('A') 开始查找键入 cba 所花费的时间。
index of c = 2
count = 2 - 0
count = 2 + 1 (c to b )
count = 2 + 1(c to b) + 1 (b to a)
count returned should be 4.
我确信这很容易通过运行两个循环在二次方程式中实现,但这不是一个有效的解决方案。我有什么改进方法吗?
最佳答案
实际上,根据定义,S1
是固定长度并且不依赖于输入 S2
这一事实意味着@Amiy 的答案是正确的。因为 indexOf
只在 S1
上运行,所以它最多需要 26 步。 O(26n) = O(n)
。我的答案只是一个较低的常数,根据变化在 1n
到 2n
之间运行。
对于一般情况,S1
也是一个变量输入,我们不能对其做出任何假设,请参阅@user000001 在O(nlogm)
中的哈希解决方案。
如果您依赖于 S1
已排序并且每个字符与其相邻字符相差 1 的事实,您可以只计算 S2
中字符之间的差异> 总结一下
例如:S2 = cba
将a
添加到S2
以获得起始值:S2 = acba
对于S2
中的每个字符c1
及其右邻c2
,距离 += |c1 - c2|
S1
已排序这一事实(这可能是您正在寻找的),您可以将
S1
的值索引到一个数组中,然后应用与上述类似的算法:
例如:
S1 = "qwertyuiopasdfghjklzxcvbnm"
arr = array of size 26
let i = 0
for each character c in S1:
arr[c - 'a'] = i++
然后,调整算法:
S2 = "cba"
let distance = 0
for each character c1 and its right-neighbour c2 in S2:
distance += |arr[c1 - 'a'] - arr[c2 - 'a']|
O(n)
中解决问题,而第一个使用
O(1)
空间,第二个使用
O(n)
空间。
关于java - 查找字符串 S2 所花费的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55662081/
我一直在读一本分配给类(class)的书,它提到数组访问需要 O(1) 时间。我意识到这非常快(也许尽可能快),但是如果您有一个循环必须多次引用它,那么分配一个临时变量以在数组中查找值有什么好处吗?或
我一直试图找出为什么这个查询花了这么长时间。以前,它的执行时间约为 150 毫秒到 200 毫秒,但现在需要 25 秒或更长时间。这是从昨晚到今天之间的事。唯一改变的就是将数据添加到表中。 根据下面的
我有一个 ng repeat 重复数据。 - data.image(src)部分为null,src=null的不再重复。 我用一个简单的 ng-if 解决了它。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我已经被这个问题困扰了一段时间了,我被难住了。 Automapper 需要 4 秒来映射 19 个对象。在我的机器(24GB 内存,3.6Ghz i7)上,该操作应该花费毫秒或纳秒。 这是映射调用。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我在机器 A 上有一个 java 进程通过 TCP 与机器 B 上的 Tomcat 通信。 TCP 连接(只是 syn-syn/ack 交换)始终需要 100 毫秒的数量级,而 ping 请求需要 1
我做了一项任务,从 sqlserver 获取超过 200 万条记录并将它们填充到 Asp.net GridView 中。 问题是,查询需要超过 2 分钟才能获得记录,而我的查询现在已经完全优化。 当我
我希望将 165 秒变成 2:40 而不是 0:2:45 函数需要能够适应秒值的大小。 我知道有无数种方法可以做到这一点,但我正在寻找一种干净的方法来做到这一点,除了 jQuery 之外没有任何外部库
我是一名优秀的程序员,十分优秀!