编程面试题

  • Big O对运行时间的粗略估计

    无法根据其Big-O等级来计算或估算某些代码的运行时间。 Big-O告诉您方法如何根据 要执行 的 操作进行 扩展 。不知道一个操作要花多长时间。另外,CPU在并行执行某些操作时可能会好坏,这会使其变得更加困难。 __ 找出性能瓶颈的 唯一 方法是执行以下操作: 观察代码运行。需要太长时间

  • 如何在JavaScript中实现二进制搜索

    要从数组中获取值,您需要指定一个整数,例如array[1]。array[1.25]将返回undefined您的情况。 为了使它正常工作,我只是Math.floor在循环内添加了一个以确保我们得到一个整数。 编辑:作为@KarelG指出,您还需要=在while循环中添加。这适用

  • Scheme中的最佳优先搜索算法

    好的,所以您要做的第一件事就是 离散化 搜索空间。以5x5网格为例,这意味着您总共可以占据25个点。 然后,选择搜索算法。您选择了贪婪的最佳优先搜索(GBFS),因此,我们继续进行下去,但是在实际情况下,应根据您的问题要求进行选择。 GBFS是一种简单的算法,需要以下内容(对于任何路径查找算法,您都需要这些模块中的大多数): str

  • 测试Magic Square Java的.txt文件

    根据您更新的要求。一个完整的例子。 public static void mainString[] args { ListInteger magicSquare = Arrays.asList2,7,6,9,5,1,4,3,8; int n = int Math.sqrtmagicSquare.size; int rowSums[] = new int

  • 如何找到一个很长的字符串的所有唯一子字符串?

    如果您确实需要内存,则可以尝试制作后缀树。尝试不是奇异的数据结构,因此,对于像Python这样的主流语言,可能有不错的实现,它们可以用于实现后缀树。 Marisa-Trie应该具有良好的内存使用率。 创建一个空的特里。 对于[0,len(s)]中的每个n,将长度n的后缀添

  • 确定两组数字是否不相交的高效算法

    使用具有O(1)查找插入的数据结构,您可以轻松插入第一组的所有元素。 然后第二个集合中的foreach元素(如果不存在不相交),否则不相交 伪码 function isDisjointlist1, list2 HashMap = new HashMap; foreach x in list1 HashMap.putx, true

  • 异或运算的最大值

    我没有详细介绍您的代码,但您似乎在r = p-1的范围内有循环;r q-1; r ++,而不必执行此操作会很好。 给定ai,我们希望找到给定范围内的xi值,其最高位尽可能多于ai的倒数。一切都在0到2 ^ 15之间,因此不必担心太多事情。对于n = 1到15,您可以根据xi的n个最高位将xi分成几部分,因此将其分为2、4、8、16 .. 32768部分。对于每一部分,请按照找到可能位置的位置的顺序排列一个

  • 使用Java的图像分类算法

    尽管不能完全确定您要寻找的是什么(对不起,您的问题有点不清楚),但是如果您想要的是一个库系统来帮助您完成工作的 分类 部分,那么您可能想看看Weka (http:www.cs.waikato.ac.nzmlweka

  • 如何实现Luhn算法?

    我看到的第一件事是您拥有: int num = tmp - 0 您应该改为: int num = tmp - '0'; 其次,您应该在循环 外 验证和for,因为您只关心处理完所有数字后的和。 第三,您从数字的末尾开始,并且不包括字符串的第一个

  • Bradley自适应阈值处理—困惑(问题)

    在开始之前,让我们介绍他们论文中编写的算法的伪代码: procedure AdaptiveThresholdin,out,w,h 1: for i = 0 to w do 2: sum ← 0 3: for j = 0 to h do 4: sum ← sum+in[i, j] 5: if i = 0 then 6: intImg[i,

  • 产生子序列

    我建议使用序列的 幂集 和从0到的二进制数 集 之间的自然对应关系2^n - 1,其中n是序列的长度。p

  • 从MATLAB中的聚类算法中删除for循环

    有了足够的RAM来使用,您可以在此处使用几种方法。 方法一: 用bsxfun&permut

  • 为什么我不能在熊猫函数中应用shift?

    尝试将框架传递给函数,而不是使用apply(我不确定为什么apply行不通,即使按列也不知道): def fx: x.level1 return x.level1 + x.level1.shift1 fframe 返回: 2014-12-01 NaN 20

  • 在数组中查找可以求和为目标值的可能数字

    只要总和小于所需总和,就可以添加实际索引的值,或者继续下一个索引。 function getSumarray, sum { function iterindex, temp { var s = temp.reducea, b = a + b, 0; if s === sum result.pushtemp; if s

  • 集合中具有数字重复的子集和算法

    如果目标相当小,则可以使用动态编程来获得O(| S | * t)解。这是Python中的示例代码: def combinationsS, t: dp = [1] + [0] * t for i in S: for j in range0, t - i + 1: dp[j + i] += dp[j] return dp[t]

  • 在python中比较两个坐标列表并使用坐标值来分配值

    这行得通,0n^2但很容易阅读和理解。 result = [] for reference, x, y in list1: for a, b, temperature in list2: if x == a and y == b: result.append[temperature, reference]

  • 如何比较两个数组中每个元素的时间复杂度小于O(n ^ 2)

    您可以以O(nlogn)复杂度执行上述算法,其中n是问题中给出的数组A和数组B的长度。 算法 1. Sort both the arrays A and B, this will take Onlogn time complexity. 2. Take two pointers i and j, initialize both of them to 0. we will use i fo

  • 如何检查一个数组是否是另一个数组的子序列?

    由于您必须将的 所有 元素匹配arrayA到的某些元素arrayB,因此您无需 回溯 。换句话说,如果有两个arrayB与的元素匹配的候选者arrayA,则可以选择最早的一个,而从不撤消选择。 因此,您不需要DP,因为可以使用简单的线性贪心策略: co

  • 在Perl中,如何迭代多个集合的笛卡尔积?

    可以在http:www.perlmonks.org?node_id=7366上找到用于做笛卡尔积的递归和更流利的Perl示例(包括注释和文档)a href="http:www.perlmonks.org?node_id=73

  • 检查数组降序

    if(“升序”检查)的第一部分是错误的,应该是: for int i = 0; i data.length-1; i++ { if data[i] data[i+1] { return false; } } return true; 相反,降序检查应为(并注意足以更改比较运算符的方向):

  • 汇总JavaScript数组的对象值?

    更新 :有关x值及其在数组中位置的附加注释使以下内容无关紧要。 没有什么特别的技巧,您只需遍历数组并建立结果。无非就是嵌套循环。如果您想在各种JavaScript引擎上实现最高效率,请避免不必要的函数调用。 类似于 以下内容: function sumYValuesarrays { var

  • 在python中取任意数量的列表的交集

    使用具有交集方法的集。 s = set s.add4 s.add5 s set[4, 5] t = set[2, 4, 9] s.intersectiont set[4] 例如,类似

  • 随机选择

    遍历从0到N的所有数字m,确定是否遇到集合中包括m。您需要根据已经处理的数字来更新包含下一个数字的概率。 让我们将此想法应用于给出的示例,其中n = 3,N = 5。首先考虑m = 0。剩下3个数字,还有5个可能性,因此集合中的0概率为35。使用随机数生成器决定是否包含数字。现在考虑m = 1。如果您在集合中包括0,则您还有2个数字和4种可能性,因此应该以24的概率包括在内,但如果不包括0,则您还有3个数字和

  • 为什么找到素数的两种算法在速度上有如此大的差异,即使它们看起来执行相同的迭代次数?

    区别在于算法上的区别。在第一个版本中,您会使用所有小素数来测试每个候选者-当小素数超过上限时,您不会停下来candidate ** 0.5并不重要,因为小素数range10**9 - 10**5 ,10**9是否具有良好的上限,但如果范围相对于上限要大得多。对于复合材料,这不会产生太大的成本,因为它们中的大多数都有至少一个小除数。但是对于素数,您必须一直到N**0.5code

  • 在数字序列的末尾查找重复序列

    您可以使用 滚动散列 来实现线性时间复杂度和O(1)空间复杂度(我认为是这种情况,因为我不相信您可以使用两个互不相同的倍数的无限重复序列) 。 算法:您只需保留两个滚动散列,它们的扩展如下:

  • 算法:使用空格将字符串分成N个部分,因此所有部分的长度几乎相同

    如果您在谈论换行,请看一下Dynamic Line Breaking,它提供了一种动态编程解决方案,可以将单词分成几行。

  • 使抛物线适合点集的最快方法?

    如果这些点没有关联的错误,则可以插值三个点。否则,最小二乘法或任何等效公式是a href="http:www.efunda.commathleastsquares

  • 计算链表中值的总和

    我针对该问题看到的其他解决方案包括通过向后遍历两个输入列表来逐步构建返回的列表,同时在您进入新列表时添加每个元素。这种方式更加复杂,因为您必须添加每个元素并处理结转。 如果数组a为:1- 2- 3- 4 数组b为:5- 6- 7- 8 向后迭代 然后4 + 8 = 12(返回列表电流= 2) 携带1

  • 想要:最好使用类似于C的语言来工作Bose-Hibbard Sort实现

    从原始文章的扫描PDF (从ACM数字图书馆下载)中,在Mac上通过复制粘贴粘贴OCR,然后手动进行清理(非常多): procedure ternary sort a, n; array a; integer n; begin integer j, L; integer arr

  • 如何在线性时间内计算列表中的不同值?

    更新:-独特与独特 如果您正在寻找 “唯一” 值(例如,如果您多次看到“ JASON”元素,那么该元素将不再是唯一的,因此不应计数) 您可以使用HashMap在线性时间内做到这

  • 打印二进制排列列表

    也许您可以使用递归算法: public void printBinString soFar, int iterations { ifiterations == 0 { System.out.printlnsoFar; } else { printBinsoFar + "0", iterations - 1; printBin

  • 不同字母长度的替换密码

    莫名其妙地Character.MAX_RADIX只有36,但是您始终可以编写自己的基本转换例程。以下实现不是高性能的,但它应该是一个很好的起点: import java.math.BigInteger; public class BaseConvert { static BigInteger fromStringString s, int base, String symbol

  • 深度优先搜索-2D游戏地图

    对于2D迷宫,您可以简单地使用广度优先搜索而不是深度优先搜索,如果您有n * n个迷宫,它将在O(n 2)中找到它。 但是还有另一种选择,它是一种标签和BFS,可在您的迷宫上工作(无需绘制图形)。 编号算法 理解广度优先搜索的一种有趣方法是以这种方式(对于迷宫)

  • 分开的数字范围,如果按顺序连字符,则按连字符;如果发生顺序连字符,则逗号

    我认为循环内循环使事情变得更加混乱。尝试仅使用一个循环,因为您只需要遍历整个列表一次。 int start,end; track start and end end = start = arr[0]; for int i = 1; i arr.Length; i++ { as long as entries are consecutive, move end forward

  • 当边长受约束时,用于最小生成树的快速算法?

    弗雷德曼·威拉德(Fredman-Willard)为单位成本RAM上的整数边长提供了O(m + n)算法。 可以说这没有太大的改进:在没有限制边缘长度的情况下(即,长度是不透明的数据类型,仅支持比较),Chazelle给出了O(m alpha(m,n)+ n)算法(alpha是逆Ackermann函数)和Karger-Klein-Tarjan给出了随机O(m + n)算法。 我不认为达伦的想法会

  • 在C ++中将多个排序序列合并为一个排序序列的算法

    可以使用三种方法进行合并: 假设您正在m lists与n elements each 算法1:- 合并一次列出两个。使用合并排序之类的合并例程,以在对列表进行排序时进行合并。没有任何库,实现起来非常简单。但是Om^2*n,如果m不大,则需要足够小的时间。 st

  • PHP数组-删除重复项(时间复杂度)

    虽然我不能说原生的array_unique函数,但我可以告诉您,您的朋友算法更快,因为: 他使用单个foreach循环,而不是双for()循环。 与PHP中的for循环相比,foreach循环的执行速度往往更快。 他使用了一个if(!)比较,而您使用了两个if()结构 您的朋友唯一调用的附加函数是in_array,而您两次调用count()

  • 日期到星期几算法?

    可以使用std::mktime和std::localtime

  • Java indexOf函数比Rabin-Karp更有效吗?文字搜寻效率

    我早些时候回答了这个问题,艾略特指出我是完全错误的。我向社区表示歉意。 String.indexOf代码没有什么神奇的。它不是本机优化的或类似的东西。您可以从String源代码中复制indexOf方法,它的运行速度也一样快。 我们这里是O()效率与实际效率之间的差异。对于长度为N的字符串和长度为M的模式的Rabin-Karp,Rabin-Karp为O(N + M),最坏的情况为O(NM)。当您查看它时,

  • PHP函数strlen()的算法复杂度

    O(1),因为长度存储为属性:source 然而,正如我们的主持人在这里和a