Tag: 难题

线性时间投票algorithm。 我不明白

当我正在阅读( find数组中最常见的条目 )时,提出了Boyer和Moore的线性时间投票algorithm 。 如果您按照该网站的链接,则可以逐步解释algorithm的工作原理。 对于给定的序列, AAACCBBCCCBCC它提出了正确的解决scheme。 当我们将指针向前移动一个元素e: 如果计数器为0,我们将当前候选人设置为e,并将计数器设置为1。 如果计数器不是0,则根据e是否是当前候选者来递增或递减计数器。 当我们完成时,如果有多数,当前候选人是多数。 如果我在AAACCBB作为input的一张纸上使用这个algorithm, 那么build议的候选人将变成B ,显然是错的。 正如我所看到的,有两种可能性 作者从来没有在AAACCBBCCCBCC以外的任何其他algorithm上尝试过他们的algorithm,完全是无能的,应该当场解雇(疑问) 。 我明显错过了一些东西 ,必须禁止从Stackoverflow,并再也不允许触摸任何涉及逻辑。 注意:下面是Niek Sanders algorithm的一个C ++实现 。 我相信他正确地实现了这个想法,因此它也有同样的问题(或不是吗?)。

生成字形的algorithm

什么是生成字形的最佳策略? An anagram is a type of word play, the result of rearranging the letters of a word or phrase to produce a new word or phrase, using all the original letters exactly once; ex. 十一二 加一是十二加一 小数点是我是一个点的地方 天文学家是月亮的星号 起初看起来非常简单,只是混淆了字母并生成了所有可能的组合。 但是,在字典中只生成单词的有效方法是什么呢? 我遇到了这个页面, 在Ruby中解决anagrams 。 但是你有什么想法?

编程之谜:如何将Excel列名转换为数字?

最近我在求职面试中被问到解决一个编程难题,我认为这将是有趣的分享。 它是关于将Excel列字母翻译为实际数字的,如果您记得,Excel会用从A到Z的字母命名其列,然后顺序为AA,AB,AC … AZ,BA,BB等。 你必须写一个接受一个string作为参数的函数(比如“AABCCE”)并返回实际的列号。 解决scheme可以是任何语言。

任意有理数的“猜数”游戏?

我曾经有过面试的问题: 我正在考虑一个正整数n。 提出一个可以在O(lg n)查询中猜测的algorithm。 每个查询都是您select的数字,我会回答“低”,“高”或“正确”。 这个问题可以通过一个修改的二进制search来解决,在这个search中列出两个幂,直到find一个超过n的值,然后在该范围内运行一个标准的二进制search。 我认为对此非常酷的是,你可以search一个特定的数字无限的空间比蛮力更快。 但是,我有这个问题的一个小的修改。 假设我select了一个0到1之间的任意有理数 ,而不是select一个正整数。 我的问题是:什么algorithm可以用来最有效地确定我select了哪个有理数? 现在,我所拥有的最好的解决scheme可以通过隐式地步行斯特恩 – 布罗科特树 ( Stern-Brocot tree )来find最多O(q)时间的p / q,二叉search树覆盖所有的合理性。 然而,我希望得到一个更接近运行时的运行时,我们得到的整数情况下,可能是像O(lg(p + q))或O(lg pq)。 有谁知道一种方法来获得这种types的运行时间? 我最初考虑使用区间[0,1]的标准二进制search,但是这只能find有重复二进制表示的有理数,这几乎是所有的有理数。 我也想过用一些其他的方法来列举理性,但是我似乎无法find一种比较大/相等/较less比较的方法来search这个空间。

如果该行或列包含0,则将matrix中的每个单元格设置为0

给定一个0和1的N×Nmatrix。 将包含0的所有行全部设置为0 ,并将每个包含0列全部设置为0 。 例如 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 结果是 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 […]

如何从字母matrix中find可能的单词列表

最近我一直在我的iPhone上玩游戏,叫做Scramble。 你们中的一些人可能会把这个游戏理解为Boggle。 从本质上讲,当游戏开始时,你得到一个像这样的字母matrix: FXIE AMLO EWBX ASTU 游戏的目标是find尽可能多的单词链接在一起形成的单词。 你可以从任何字母开始,围绕它的所有字母都是公平的游戏,然后一旦你移动到下一个字母,围绕这个字母的所有字母都是公平的游戏, 除了以前使用的任何字母 。 所以,在上面的网格中,例如,我可以想出LOB , TUX , SEA , FAME等词。单词必须至less有3个字符,并且不超过NxN个字符,在这个游戏中可以是16个,但是可以在一些实现中有所不同 虽然这个游戏很有趣,而且让人上瘾,但是我显然不是很擅长这个游戏,我想通过制作一个能够给我最好的单词(这个单词越长得分越多)的程序来作弊。 示例Boggle http://www.boggled.org/sample.gif 不幸的是,我不擅长algorithm或其效率等等。 我第一次尝试使用这样一个字典(〜2.3MB),并进行线性search,试图将组合与字典条目进行匹配。 这需要很长时间才能find可能的单词,而且由于每轮只能得到2分钟,所以根本不够。 我很感兴趣,看看是否有任何Stackoverflowers可以拿出更有效的解决scheme。 我主要是在寻找使用Big 3 Ps的解决scheme:Python,PHP和Perl,尽pipeJava或C ++也是很酷的,因为速度是必不可less的。 当前解决scheme : Python的Adam Rosenfield,大约20多岁 约翰·福伊(John Fouhy),Python,〜3s Kent Fredric,Perl,〜1s 大stream士培根,Python,〜1s rvarcher,VB.NET (live link) ,〜1s Paolo Bergantino,PHP (live link) ,〜5s(本地〜2s) BOUNTY : 我为这个问题增添了一笔赏金,这是我向所有参与其中的人们表示感谢的方式。 不幸的是,我只能给你们中的一个人接受答案,所以我将从现在起7天内衡量谁是最快的求助者,并奖励获奖者。 赏金赏赐。 感谢所有参与的人。

编译时间sizeof_array而不使用macros

这只是在过去几天困扰我的东西,我不认为有可能解决,但我以前见过模板魔术。 开始: 要获取标准C ++数组中的元素数量,我可以使用macros(1)或types安全内联函数(2): (1) #define sizeof_array(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0])) (2) template <typename T> size_t sizeof_array(const T& ARRAY){ return (sizeof(ARRAY)/sizeof(ARRAY[0])); } 正如你所看到的,第一个问题是macros(当前我认为是一个问题),另一个问题是编译时不能获取数组的大小。 即我不能写: enum ENUM{N=sizeof_array(ARRAY)}; 要么 BOOST_STATIC_ASSERT(sizeof_array(ARRAY)==10);// Assuming the size 10.. 有谁知道这是否可以解决? 更新 : 这个问题是在constexpr被引入之前创build的。 现在你可以简单地使用: template <typename T> constexpr auto sizeof_array(const T& iarray) { return (sizeof(iarray) / sizeof(iarray[0])); }

在列表中find单个号码

什么是最好的algorithmfind一个数字只发生一次在一个列表中,其中所有其他数字发生了两次。 所以,在整数列表(让我们把它作为一个数组)每个整数重复两次,除了一个。 要find那个,最好的algorithm是什么。

当给定一些美元价值时如何find所有的硬币组合

我发现了几个月前我正在为面试准备的一段代码。 根据我的评论,它试图解决这个问题: 给定一些美分值(例如200 = 2美元,1000 = 10美元),找出组成美元值的所有硬币组合。 只有一分钱,镍,一angular和四分之一。 (季度= 25美分,一angular= 10美分,镍= 5美分,分钱= 1美分) 例如,如果有100个,答案应该是: 4 quarter(s) 0 dime(s) 0 nickel(s) 0 pennies 3 quarter(s) 1 dime(s) 0 nickel(s) 15 pennies etc. 我相信这可以通过迭代和recursion的方式解决。 我的recursion解决scheme相当麻烦,我想知道其他人将如何解决这个问题。 这个问题的难点在于尽可能提高效率。

根据返回值重载C ++函数

我们都知道你可以根据参数重载一个函数: int mul(int i, int j) { return i*j; } std::string mul(char c, int n) { return std::string(n, c); } 你可以根据返回值重载一个函数吗? 定义一个函数根据返回值的使用方式返回不同的东西: int n = mul(6, 3); // n = 18 std::string s = mul(6, 3); // s = "666" // Note that both invocations take the exact same parameters (same types) 你可以假设第一个参数在0-9之间,不需要validationinput或者有任何error handling。