Tag: algorithm

使用.NET随机化数组的最佳方法

用.NET随机化string数组的最佳方法是什么? 我的数组包含大约500个string,我想用相同的string,但随机顺序创build一个新的Array 。 请在答案中包含C#示例。

什么是最快/最有效的方法来find一个整数在C中的最高设置位(MSB)?

如果我有一个整数n,我想知道最重要的位的位置(也就是说,如果最低有效位是在右边,我想知道最左边的位是1)的位置,什么是最快/最有效的找出方法? 我知道POSIX在strings.h中支持一个ffs()方法来查找第一个设置位,但似乎没有对应的fls()方法。 有没有一些真正明显的做法,我失踪了? 如果你不能使用POSIX函数来实现可移植性呢? 编辑:如何在32位和64位体系结构上工作的解决scheme(许多代码清单看起来像只能在32位整数)。

在有向图中查找所有的周期

我如何find(迭代)有向图中所有的周期从/到给定的节点? 例如,我想要这样的东西: A->B->A A->B->C->A 但不是:B-> C-> B

如何编码一个URL缩短?

我想创build一个URL shortener服务,您可以在input字段中写入一个长URL,该服务将URL缩短为“ http://www.example.org/abcdef ”。 编辑:由于对这个主题的持续兴趣,我已经发布了一个有效的解决scheme,GitHub的JavaScript , PHP , Python和Java的实现 。 如果你喜欢,请加上你的解 除了“ abcdef ”之外,还可以使用其他string,其中包含az, AZ and 0-9 6个字符。 这使得56-570亿可能的string。 我的方法是: 我有一个三列的数据库表: ID,整数,自动递增 长,string,用户input的长URL 短,string,缩短的url(或只是六个字符) 然后我会将长URL插入表中。 然后,我将select“ id ”的自动增量值并构build它的散列。 这个散列应该被插入为“ short ”。 但是我应该build立什么样的散列? 像MD5这样的散列algorithm会造成太长的string。 我想,我不使用这些algorithm。 自buildalgorithm也可以工作。 我的想法: 对于“ http://www.google.de/ ”,我得到自动增量编号239472 。 然后我执行以下步骤: short = ''; if divisible by 2, add "a"+the result to short if divisible […]

简单的面试问题变得更加困难:给定数字1..100,find缺less的数字(s)

我有一段很有意思的面试经历。 问题开始真的很简单: Q1 :我们有一个包含数字3 ,…, 100 。 每个号码只出现一次,所以有100个号码。 现在从包里随机抽出一个号码。 find缺less的号码。 当然,我之前听过这个面试问题,所以我很快就回答了: A1 :那么数字1 + 2 + 3 + … + N的总和就是(N+1)(N/2) (参见维基百科:算术系列之和 )。 对于N = 100 ,总和是5050 。 因此,如果包里有所有的数字,那么总和就是5050 。 由于缺less一个数字,所以总和将小于这个数字,不同之处在于这个数字。 所以我们可以在O(N)时间和O(1)空间find缺失的数字。 在这一点上,我认为我做得很好,但突然之间,这个问题出乎意料地转向: Q2 :这是正确的,但是现在如果两个数字不见了,你会怎么做呢? 我从来没有见过/听过/考虑过这种变化,所以我惊慌失措,无法回答这个问题。 面试官坚持了解我的思维过程,所以我提到也许我们可以通过与预期产品进行比较来获得更多的信息,或者在收集了第一遍等等的信息之后进行第二轮的处理,但是我真的只是在拍摄在黑暗中,而不是实际上有一个清晰的解决schemepath。 面试官试图鼓励我说,有第二个等式确实是解决问题的一种方法。 在这一点上,我有点不高兴(因为不知道答案),并询问这是一个普通的(阅读:“有用的”)编程技巧,或者它只是一个技巧/疑难答案。 面试官的回答让我感到吃惊:你可以推广这项技术,找出3个缺失的数字。 事实上,你可以概括它findk缺失的数字。 Qk :如果包里没有K个数字,你会如何有效地find它? 这是几个月前,我仍然不知道这个技术是什么。 显然有一个Ω(N)时间的下界,因为我们必须扫描所有的数字至less一次,但采访者坚持认为,求解技术的时间和空间复杂度(减去O(N)时间input扫描)定义为k不是N。 所以这里的问题很简单: 你将如何解决Q2 ? 你将如何解决Q3 ? 你将如何解决QK ? 澄清 通常从1 … […]

如何使用合并sortingalgorithm就地sorting?

我知道这个问题不是太具体。 我想要的是有人告诉我如何将正常的合并sorting转换为就地合并sorting(或具有恒定额外空间开销的合并sorting)。 我能find的所有网页都是“太复杂”或“超出本文范围”的页面。 唯一已知的就地合并(没有任何额外的空间)的方法太复杂,不能简化为实际的程序。 ( 从这里拿) 即使它太复杂了, 如何进行合并sorting的基本概念是什么?

用于testing点是否在圆内的等式

如果你有一个圆心(center_x, center_y)和半径radius ,你如何testing一个给定的点坐标(x, y)是否在圆内?

不变摊销时间

在谈论algorithm的时间复杂度时,“恒定的摊销时间”是什么意思?

最简单的方法来平整/不平坦的嵌套JSON对象

我将一些代码放在一起,使复杂/嵌套的JSON对象变平和不变。 它的工作,但有点慢(触发'长脚本'的警告)。 我想要的扁平名称“。” 作为数组的分隔符和[INDEX]。 例子: un-flattened | flattened ————————— {foo:{bar:false}} => {"foo.bar":false} {a:[{b:["c","d"]}]} => {"a[0].b[0]":"c","a[0].b[1]":"d"} [1,[2,[3,4],5],6] => {"[0]":1,"[1].[0]":2,"[1].[1].[0]":3,"[1].[1].[1]":4,"[1].[2]":5,"[2]":6} 我创build了一个基准,模拟我的用例http://jsfiddle.net/WSzec/ 获取一个嵌套的JSON对象 压扁它 仔细观察,并可能修改它,同时扁平化 把它放回原来的嵌套格式来运走 我想要更快的代码:为了说明起见,在IE 9 +,FF 24 +和Chrome 29上完成JSFiddle基准( http://jsfiddle.net/WSzec/ )的代码显着更快(〜20%+会更好) +。 以下是相关的JavaScript代码:当前最快: http : //jsfiddle.net/WSzec/6/ JSON.unflatten = function(data) { "use strict"; if (Object(data) !== data || Array.isArray(data)) return data; var result = {}, cur, […]

你如何旋转二维数组?

受到Raymond Chen的文章的启发,假设你有一个4×4的二维数组,写一个旋转90度的函数。 雷蒙德链接到伪代码的解决scheme,但我希望看到一些现实世界的东西。 [1][2][3][4] [5][6][7][8] [9][0][1][2] [3][4][5][6] 变为: [3][9][5][1] [4][0][6][2] [5][1][7][3] [6][2][8][4] 更新 :尼克的答案是最直接的,但有没有办法做得比n ^ 2更好? 如果matrix是10000×10000呢?