【发布时间】:2014-11-26 23:09:23
【问题描述】:
一位朋友提出了这个挑战。只是为了培训,我尝试使用 Reactive Extensions 解决它,但我没有运气。这并不奇怪,因为我还是 Rx 的新手。
这就是问题所在:
正整数 N 内的孔径是 其二进制表示中的连续零被包围 两端的。
例如,数字 9 具有二进制表示 1001 并包含一个 长度为 2 的孔径。数字 529 具有二进制表示 1000010001 并包含两个孔:一个长度为 4,另一个为 长度 3. 数字 20 具有二进制表示 10100 并包含 一个长度为 1 的孔径。数字 15 的二进制表示为 1111 并且没有光圈。编写一个函数:class Aperture { public int 孔径(int N); },给定一个正整数 N,返回 其最长孔径的长度。如果 N,该函数应返回 0 不包含光圈。假设:N是一个整数 范围 [1..2,147,483,647] 复杂度:算法时间复杂度为 O(log(N));
算法空间复杂度为 O(1)(最坏情况——不计算输入) 参数)
为简化起见,我尝试将其应用于“1000010001”之类的字符串,而不是 二进制表示。
无论如何,我不介意复杂性部分,只是我想知道一种“优雅”的方式来做到这一点。
【问题讨论】:
-
听起来像是你的“朋友”的一项有趣的家庭作业。因为我正在学习它,所以我明天将在 Haskell 中尝试一下。 :-)
标签: c# algorithm system.reactive reactive-programming