编程面试题

  • 数组从a1,..,an,b1,.. bn移到a1,b1,.. an,bn

    经过一番尝试和尝试绊脚石之后,我认为我已经开始理解,尽管数学对我来说仍然很困难。我认为它是这样的: 确定换位的置换周期(这可以在实际数据传输期间或之前完成)。公式to = 2*from mod M*N - 1, where M = 2, N = array length 2可以用来查找索引目标(排列)。(因为我们知道M = 2,所以我简化了该问题的公式。)访问索引的标记可以帮助确定下一

  • 具有大量文件的目录结构的树遍历算法

    广度优先会更好。当您输入根文件夹时,将创建您需要处理的项目列表。这些项目中有些是文件,有些是目录。 如果您使用广度优先,则在继续处理子目录之一之前,您将处理目录中的文件并忽略它们。 如果您使用深度优先,则需要继续增加文件列表,以备日后深入研究时使用。这样会占用更多内存来维护您要处理的文件列表,可能会导致更多页面错误等。 另外,无论如何,您都需要遍历新项目的列表,以找出哪些是可以钻取的目录。在处

  • 查找2个字符串之间任意长度的所有共享子字符串,然后计算字符串2中出现次数的算法?

    这是一个基于C的实现,该实现基于最长的公共前缀数组的遍历输入串联的后缀数组。您可以用实数(O(n)或O(n log n))替换编程竞赛级(O(n log ^ 2 n))后缀数组实现,以提高性能。(编辑:这样做,其他一些更改反映了问询者的新要求:https : a href="https:gith

  • 如何知道二进制数是否除以3?

    请访问此网站:如何判断二进制数是否可被三除 从右开始 基本上计算非零奇数位和非零偶数位

  • 预期的反演次数-从Cormen的引言到算法

    我认为是正确的,但是我认为证明它的正确方法是使用条件期望: 对于所有X和Y,我们都有:E [X] = E [E [X | Y]] 那么在你的情况下: E(i + 1)= E [x(i + 1)] = E [E [x(i + 1)| x(i)]] = E [SUM(k)(1 + i)+ x(i)] = i 2 + E [x(i)] = i 2 + E(i)

  • 随机素数

    生成1024个随机位。使用强度足以满足您预期目的的随机来源。 将最高位和最低位设置为1。这确保没有前导零(主要候选数足够大)并且它不是偶数(肯定不是质数)。 测试素数。如果不是素数,请返回1。 o

  • n选择2的复杂度在Theta(n ^ 2)中?

    n选择2是 n(n-1) 2 这是 n 2 2-n 2 我们可以通过在n趋于无穷大时取它们的比率极限来看到n(n-1) 2 =Θ(n 2): lim n→∞(n 2 2-n 2) n

  • 使用这种算法,在最坏的情况下二进制搜索会进行多少次比较?

    在这种情况下,最坏的情况是,如果元素K在A中不存在并且小于A中的所有元素。那么在每个步骤中我们有两个比较:K A[m]和K A[m]。 因为在每一步中,数组都被切成两部分,每个部分的大小为n-12,所以我们有最多的log_2n-1步骤。 这导致了总共的2*log_2

  • 是基于统计数据而不是字典/表格的“字谜解算器”?

    如果我正确理解了您的问题,那么您正在搜索单词中所有字母的排列,以寻找2克概率乘积最低的那个。 如果您说的话太长,无法简单地对所有组合进行暴力破解,我发现随机优化算法会在短时间内产生良好的效果。我(具有数学背景)已经对“ 模拟退火 ” 算法做了一些工作,我认为它非常适合您的问题。而且很容易实

  • 计数矩形中的点

    将点表示为kd树。 也就是说,可以将其中每个节点代表一个点且每个非叶节点的二叉树视为在该节点的x或y值上垂直或水平(或者在每个级别上)划分当前区域。 然后,进行查询: 当前节点=根 当前面积=当前节点的面积(可以在沿着树递归时

  • C ++标准库-什么时候应该使用它,什么时候不应该使用?

    您可能会变得懒惰或固执。就个人而言,我一直在生产代码中使用它们。 我这样做并不是出于幻想,也不是因为我喜欢编写“太空时代代码”。相反,我之所以这样做是因为我是一个偏执的程序员,而且我知道生产环境是一个充满敌意的地方,如果有机会的话,它将破坏代码,并使我的程序减少成堆毫无价值的字节。 之所以这样做,是因为我的座右铭是“最好的代码,就是您永远不会编写的代码”。学习 有效地 使用STL和Stdbr

  • Python中的线平滑算法?

    我猜您使用了这里的代码。您应该注意,该代码是针对一维数据点的,而不是针对多维数据点的。 我不是太了解高斯平滑算法但毕竟 只是 短暂地经历你的代码,我相信以下是你正在尝试做的(我不知道,如果它给你你想要的结果)。用以

  • 完整的后缀数组

    后缀数组可以满足您的需要,因为每个子字符串都是后缀之一的前缀。具体来说,给定您的后缀数组 abcd bcd cd d 并假设您要查找子字符串“ bc”,那么可以通过查找所有以“ bc”开头的后缀(在这种情况下只有一个“ bcd”)来找到它。由于后缀数组是按字典顺序排序的,因此找到共享某个前缀的所有后缀都对应于后缀数组的二分查找,结果将是后缀数组的一个连续范围的条目。 但是,存在

  • 2009 ACM-ICPC世界总决赛带来的飞机调度挑战

    我会做这样的事情: #include stdio.h #include stdlib.h #include string.h typedef uint MASK; #define INPUT_SCALE 60 #define MAX_TIME 1440 * 60 void readPlaneDataint endTime, MASK landi

  • 寻找最接近的匹配

    您必须先定义 最接近的匹配项, 然后才能找到它!! 1-许多人使用的一种方法是 均方误差(或欧氏距离):stron

  • 查找最长的重复字符串及其在给定字符串中重复的次数

    您可以通过构建后缀树并采用从根到最深内部节点的路径来在线性时间内解决此问题。这将为您提供最长的重复字符串。一旦有了该字符串,对它出现的次数进行计数就很简单了。

  • 先验算法

    好吧,我认为您已经阅读了维基百科条目,但是您说“一个基本示例会使我更容易理解”。Wikipedia就是这样,所以我假设您尚未阅读并建议您阅读。 阅读维基百科文章。

  • 3D线段和平面相交

    我对此可能是错的,但是代码中有些地方似乎非常可疑。首先,请考虑以下这一行: calculate plane float d = Dotnormal, coord; 在这里,您的值d对应于平面法线(向量)与空间中的点(平面上的点)之间的点积。这似乎是错误的。特别是,如果您有任何平面穿过原点,并将原点用作坐标点,则最终将进行计算

  • 如何在不预先生成整个序列的情况下生成可预测的序列改组?

    我之前实际上已经写过:使用分组密码进行安全置换。简而言之: 是的,您可以使用LFSR生成长度为2的幂的置换。您还可以使用任何分组密码。使用分组密码,您还可以在索引n或元素n的索引处找到该元素

  • 获取层次结构级别

    以下代码的工作示例在jsFiddle上。 通过id对树进行索引,并从每个节点向上遍历树,然后计数直到您击中根为止。首先通过索引,我们可以达到O(n)时间复杂度(取决于树的密度)。*已更新以满足排序要求,并允许排除根节点: function levelAndSo

  • 查找无向图的所有连接组件

    这可以使用“ 广度优先搜索” 解决。 这个想法是通过跳到相邻顶点来遍历源顶点中所有可到达的顶点。首先访问源顶点旁边的顶点,然后访问相距2跳的顶点,依此类推。 由于所使用的图形表示形式( 边缘列表) ,因此此处的代码效率不高。为了获得更好的性能,您可能需要使用 邻接表 。 这是一些JavaScr

  • 查找数组中未出现两次的整数

    您可以在整个阵列上使用“异或”运算。每对数字将相互抵消,使您获得所寻求的价值。 int get_orphanint const * a, int len { int value = 0; for int i = 0; i len; ++i value ^= a[i]; `value` now contains the number that occ

  • 使用OpenCV在哪里可以学习/找到从Kinect流式传输的手势识别示例?

    我认为它不会这么简单,主要是因为kinect的深度图像数据不是那么敏感。因此,在1m至1.5m的距离之后,所有手指将合并,因此您将无法获得清晰的轮廓来检测手指

  • 检查字符串的排列是否可以成为回文

    您真正要寻找的是是否所有(或除一个以外的)字母都配对了。只要它们是,它们就可以变成回文。 所以这就像… bool canBeTurnedIntoAPalindromestring drome { If we've found a letter that has no match, the center letter. bool centerUsed = false; cha

  • 如何在Kadane算法中返回最大子数组?

    像这样: public class Kadane { double[] maxSubarraydouble[] a { double max_so_far = 0; double max_ending_here = 0; int max_start_index = 0; int startIndex = 0; int max_end_index = -1;

  • 最长公共子序列

    为什么您认为您的算法已损坏?最长的公共子序列是ACCTAGTATTGTTC,长度为14个字符: string B = "AAACCGTGAGTTATTCGTTCTAGAA"; ^^^ ^ ^^ ^^^^ ^^^^ string A = "CACCCCTAAGGTACCTTTGGTTC"; ^^^ ^ ^^ ^^ ^^ ^ ^^^

  • 如何找到使字符串平衡的最小操作数?

    我认为您这里真的不需要动态编程。 O (length( S ))时间的一种方法: 遍历 S ,构建频率图(从不同字母A–Z到计数的映射)。对于您的ABCB示例,就是A-1 B-2 C-1 D-0 E-0 ... Z-0,我们可以将其表示为ar

  • OpenGL ES的多边形三角剖分成三角形带

    在2D且无孔的情况下,这相当容易。首先,您需要将多边形分解为一个或多个单调多边形。 单调多边形很容易变成三条纹,只需将值排序为y,找到最顶部和最底部的顶点,然后您就可以在左右两边找到顶点列表(因为顶点已定义,顺时针说)。然后,从最顶部的顶点开始,并从左侧和右侧以交替方式添加顶点。p

  • 分析求解三次方程的功能

    干得好。包括处理退化案件。主要算法主要来自维基百科文章。 function cuberootx { var y = Math.powMath.absx, 13; return x 0 ? -y : y; } function solveCubica, b

  • 使用动态编程将自然数表示为平方和

    我不确定DP是否是解决此问题的最有效方法,但是您要求使用DP。 min [i] = min(min [i-1] +1,1 + min [i-prev])其中prev是一个平方数 i 这很接近,我将条件写为 min[i] = min1 + min[i - prev] for each square number 'pr

  • 我需要一种最佳算法来找到数字N的最大除数。最好在C ++或C#中

    首先想到您可以找到最小的除数d(当然不等于1),然后N d将是您要查找的最大除数。 例如,如果N被3整除,那么您将需要2次迭代才能找到答案-在您的情况下,它大约是N 6次迭代。 编辑: 要进一步改善算法,您可以仅对奇数进行迭代(在检查是否为偶数之后),或者更好的是,如果您已预先计算了素数列表,则只能对它们进行迭代,因为最小除数显然是是素数。

  • 快速检查矩阵是否为奇数的方法?(不可逆,det = 0)

    最好的方法是通过SVD 计算条件编号,并检查条件编号是否大于1 epsilon,其中epsilon是机器精度。 如果您允许假阴性(即矩阵有缺陷,但是您的算法

  • 查找给定年份零日的星期几的最简单算法是什么?

    每年重复28年。将年份除以28,然后返回相应的星期几(将星期几的值存储在数组向量中)。这将是 的 最快,最简单的算法。但是这种算法对于阅读代码的人来说根本不是很清楚。您的选择取决于您想要快速,简单还是“明显正确”。

  • 解决填字游戏

    您拥有的基本想法非常明智: 识别板上的插槽。 尝试每个适合每个单词的插槽。 如果每个插槽都可以无冲突地填满,那就解决了。 这是一个很棒的计划。下一步是将其转换为设计。对于这样的小程序,我们可以直接使用伪代码。如其他答案所述,其要点是a href="http:introcs.cs.princeton.edujava23r

  • 如何在Python中找到1000以下3或5的所有倍数的和?

    rangek,max不包含max,因此您实际上要检查并包含998(而999是3的倍数)。使用range1,1000代替。

  • quicksort与缓存有何关系?

    quicksort将数组更改为原位-在数组中进行处理(例如,与合并排序不同- 会为其创建另一个数组)。因此,它采用了引用局部性原则。 高速缓存受益于对内存中同一位置的多次访问,因为只有第一个访问实际上需要从内存中获取-其余的访问都是从高速缓存中获取的,这比对内存的访问要快得多。

  • 如何以每个元素大于/小于其相邻元素的方式重新排列数组

    这可以在O(n)中完成: 在O(n)中查找中位数(说明可在Wikipedia中找到 将大于中位数的每个元素放在奇数个位置,将每个较小的

  • 奇怪但实用的2D装箱优化

    公式 鉴于: 对于每个单元格i = 1, ..., M,(最小)宽度W_i和(最小)高度H_i 任何堆栈的最大允许高度, T 我们可以制定混合a href="http:en.wikipedia.orgwikiInteg

  • “ Programming Pearls”二进制搜索帮助

    每次通过之后,下一次通过将位于您已编译的两个列表中的较小者。 在某个时候,您必须遇到一个空列表,这将确定您的电话号码。例如,让我们只使用3位数字。 000 001 110 100 111 第一次通过后,我们有 000 001 110 100 111 然后,我们查看第一个列表中的第二个位

  • 比较XML节点的高效算法

    我建议不要滚动自己的哈希创建函数,而要依赖内置XNodeEqualityComparer的GetHashCode方法。这样可以确保在创建结果时考虑到属性和后代节点,也可以节省一些时间。 您的代码如下所示: XNodeEqualityComparer comparer = new XNodeEqualityComparer; XDocumen