编程面试题

  • 是否可以random_shuffle一个int元素数组?

    您需要传递指向a[0]和的指针,而a[10]不是元素本身: random_shufflea[0], a[10]; end must be 10, not 9 在C ++ 11中,您可以使用std::begin和std::end:

  • 查找数字是否具有P ^ Q形式?

    如果我们假设非平凡的情况,那么约束将是这样的: N = 2,100000 P1 Q1 可以通过 将所有功率标记为 最大然后1达到N结果的

  • 这是围绕点旋转的方式吗?

    没错,除了在开始时您需要减去50以使多边形中心回到0,然后在末尾添加50以使多边形回到其原始位置。 实际上,您在这里使用的是2D旋转矩阵:

  • 在直接加权图中找到从节点A到节点B的所有简单路径,权重之和小于某个值?

    您问题的答案 从理论上讲,每个节点的权重都为1+,因此循环不会成为问题,因为权重会随着路径的增长而增加。但是…如果您的任何节点的成本权重= 0,则应包括最大时间或深度,以便停止寻路。 如果您想要完美的路径,请使用Djikstra的算法。如果您不关心完美,请使用A *。创建候选节点列表时,请先进行验证,然后再将其添加到搜索列表中。总权重大于最大权重的所有节点都应从候选列表中删

  • 更改FloodFill-Algorithm以获得两个数据点的Voronoi领土?

    “每个点可以先到达另一个”是什么意思? 在我看来,您需要进行BF搜索。像这样使用FIFO队列: 令p1和p2为两点的位置。 令f为队列中的第一个元素,l为最后一个元素。最初,f = 0,l =1。令Q为队列。 Q[f] = p1 Q[l] = p2 while f = l { poz = Q[f]; ++f; for eac

  • 如何使用递归建立螺旋方阵?

    #include stdio.h void build_matrixint msize, int a[msize][msize], int size, int value{ int i, row, col; ifsize 1 return; row = col = msize - size 2; ifsize==1{ a

  • 修改欧拉Totient函数

    您需要使用包含- 排除原则。让我们做一个例子:假设您要计算coprime为30 = 2 * 3 * 5且小于20的整数的数量。 首先要注意的是,您可以算出不是互质数为30的数字,然后从总数中减去它们,这很容易。小于20的2的倍数是202

  • 滑动窗口的最大值为O(n)时间

    令人惊讶的是,此算法的易于理解的描述并不那么容易理解,所以诀窍是: 在将长度窗口滑动到长度m列表上时n,将保持当前窗口中所有元素的双端队列,这有时 可能会 在任何窗口中变为最大值。 如果当前窗口中的一个元素大于窗口中该元素之后出现的所有元素,则该元素 可能会 变为最大。请注意,这始终包括当前窗口中的最后一个元素。

  • 生成数字组合

    这是一个递归解决方案: $nbRank = 3; $nbNumeric = 2; function getCombinations $length, $min, $max, $aStartingCombinations { if $length == 1 { return range $min, $max; } $final = array ;

  • 拆分整数乘法

    只需使用16位数字。 void multiplyuint32_t a, uint32_t b, uint32_t* h, uint32_t* l { uint32_t const base = 0x10000; uint32_t al = a%base, ah = abase, bl = b%base, bh = bbase; *l = al*bl; *h = ah*bh;

  • 如何获得加速度计的轴和运动矢量之间的旋转?

    我发现了一篇可能有用的文章,这里是 链接。 该想法基于获取3轴(n乘以3的矩阵)上的加速度计数据,并找到矩阵的PCA(原理成分分析)。PCA是矩阵中能量最高的3个向量。 从概念上讲,主矢量(具有最高的能量)方向是向上,第二个是航向。您可以在文章中阅读全部内容。我尝试在mat

  • 可以扩展二次方的C程序

    #include stdio.h #include stdlib.h #include ctype.h #define BUFFSIZE 128 typedef struct _exp { Integral expression int n; Max of order int *k;coefficient listarray# k[0] as co

  • C#/ VB.NET中的快速填充/填充算法

    我非常喜欢与Aforge库一起使用,该库具有两个很好的FlodFill实现,但是它们都仅是4向的。 如果需要其他实现,则有两个代码项目文章a href="http:www.codeproject.comKBGDI- plusfloodfillincsharp.

  • 关于如何使我的算法更快的建议

    需要考虑的几件事: 正如@Alex Reynolds指出的那样,您尝试考虑的数字可能太大,以致于不能包含在中int。您可能需要使用long或uint64_t来存储数字。仅此一项就可以解决问题。 您可能想尝试这种方法,而不是检查每个除数,看看哪一个是质数,将n设置为60085147514

  • CUDA矩阵逆高斯约旦

    看来问题出在您的gaussjordan内核中。 在原始(L)矩阵上进行高斯-约旦消除时,可以仅对枢轴点右侧的行元素进行处理。 但是,当您将相同的行操作应用于单位矩阵以创建逆(I)时,有必要将等效的行操作应用于行的 每个成员 ,而不仅仅是枢轴点右侧的成员。 因此,如果您这样修改gaussj

  • 计算R中的现有排列

    aggregate可以做到这一点。这是一个简短的示例: r - function rbinom10, 1, .5 d - data.frameIDNum=1:10, Var1=r, Var2=r d IDNum Var1 Var2 1 1 0 1 2 2 0 1 3 3 0 0 4

  • 是否有一种算法可以找到2个列表的唯一组合?5个清单?

    也许您正在寻找itertools.product: #!usrbinenv python import itertools a=[1,2] b=['a','b'] c=[strs+strt for s,t in itertools.producta,b] printc ['1a', '1b', '2a', '2b'] v=[1,'a'] w=[1,'b'] x=[1,'c'] y=[1,'

  • 字符串2的字谜是字符串1的子字符串

    编辑时:在最坏的情况下,我的第一个答案是二次方。我将其调整为严格线性的: 这是一种基于滑动窗口概念的方法:创建一个字典,该字典由第一个字典的字母作为键,并带有对应值的字母频率计数。可以将其视为目标字典,m第二个字符串中的连续字母需要匹配,其中m第一个字符串的长度是。 首先处理m第二个字符串中的第一个字母。对于每个这样的字母,如果它在目

  • 最便宜的路径算法

    您描述的动态编程方法称为DAG最短路径。它仅适用于有向无环图(即无循环的图)。它的渐近运行时间是O(V + E)(其中V和E分别是顶点和边的数量),比Dijkstra的算法快。 我不确定,但是您是否在问如何计算长度等于最短路径的路径数? 当您计

  • 重新包装问题

    这个2D 装箱问题看起来像是NP难题。 这是您的几个选择: 蛮力或更好的分支和约束。(根本不扩展),但是会找到最佳的解决方案(也许不是我们的一生)。

  • 优化浮点除法和转换操​​作

    将除法预先转换为可乘常数: a 3 255 是相同的 a * 1 3 * 255 所以预先计算: const float AVERAGE_SCALE_FACTOR = 1.f 3.f * 255.f 然后做

  • 用JavaScript创建组合

    function permutationschoices, callback, prefix { if!choices.length { return callbackprefix; } forvar c = 0; c choices[0].length; c++ { permutationschoices.slice1, callback,

  • 如何找到所有可能的k整数,它们的和等于R中的某个数字

    根据对评论中问题的澄清进行编辑: 听起来您需要所有组成,而不是integer的所有分区n。(两个仅在术语顺序上不同的序列被视为相同的 分区 ,但 组成 不同。) 要获取组成,请使用 partitions* 包中的compositionscod

  • 如何在C#中评估自定义括号表达式?

    如果我对您的理解正确,那么您已经有了表达式评估器。您需要的是根据括号拆分评估。我将使用一个循环,使用此正则表达式在其中找到内部括号组: \[^]*\ 然后,如果找到了它们,请用您的评估例程的结果替换它们,并重复直到最后一个字符串保留而没有括号。 伪代码: Find a string enclosed by ,

  • 需要一个具有多个目标的星级搜索算法的想法

    您是在描述路径条件而不是目标条件。像所有搜索算法一样,A *正在寻找通往目标的路径[可以在目标集中,没有问题]。 您的问题(对于一般情况)至少与Traveling Salesman问题一样困难,因此,该问题是a href="http:en.wikipedia.org

  • 为什么我的用于查找质数的红宝石编码不起作用?

    你有几个问题。前面已经确定了一个:语句的位置i = 2。这是固定的代码。 def is_prime?*nums nums.each do |num| i = 2 while i num if num % i == 0 puts "#{num} is not a prime" else

  • 如何有效地生成一组具有预定义分布的唯一随机数?

    问题不太可能是您显示的循环: 令n为分布的大小,我为getNextSample的调用次数。我们有I = sum_i(C_i),其中C_i是集合大小为i时getNextSample的调用次数。为了找到E [C_i],请注意C_i是泊松过程的到达时间,其中λ= 1-i n,因此与λ

  • 检查字符串是否具有字母的所有字母

    尚未完全优化: public static void mainString... a { String s = "Pack my box with five dozen liquor jugs."; int i=0; forchar c : s.toCharArray { int x = Character.toUpperCasec; if

  • 句子中的最后一句话:在SQL中(可能使用正则表达式吗?)

    我认为使用INSTR SUBSTR更简单: WITH q AS SELECT 'abc def ghi' AS sentence FROM DUAL SELECT SUBSTRsentence, INSTRsentence,' ',-1 + 1 FROM q;

  • 在进行要求苛刻的计算时,MATLAB会推迟显示调用。这是为什么?

    我几乎可以肯定这是因为EDT。 这就是drawow()的功能。有关详细说明,请

  • 在阵列上执行笛卡尔积

    解决此问题的一种方法是通过注意连续不断地一次减少一个阵列的数量 A 0 ×A 1 ×A 2 =(A 0 ×A 1)×A 2 因此,您可以编写像这样的函数,该函数计算两个数组的笛卡尔积: int[] cartesianProductint[] one, int[] two { int[] result =

  • 二维数组中的最短路径

    要查找start点到地图上所有其他点的最短距离,可以使用BFS。样例代码: public void visitString []map , Point start{ int []x = {0,0,1,-1};This represent

  • 0-1多维背包

    这是解决二维(尺寸和体积)背包背包0-1问题的通用实现。我使用矩阵而不是列表列表,因为它容易得多。这是整个类,也是测试它的主要方法。 要添加尺寸,只需向矩阵添加新尺寸,然后添加内部循环以检查所有条件。 public class MultidimensionalKnapsack { ** The size of the knapsack * private static int

  • 泛洪填充Python

    好吧,洪水填充的想法是: 检查该点是否符合条件。 如果是的话,将其更改为“ c”(在您的情况下)-并在所有周围的单元格上调用泛洪填充。 类似于python的伪代码: def floodfillmatrix, x, y: #"hidden" stop clause - not

  • 渐近分析

    因此,您的问题实际上可以简化为“谐波序列11 + 12 + 13 + … + 1 N的紧界是什么?” 答案是log N(您可以将其视为连续的总和而不是离散的,并且注意的积分1N是log N) 您的谐波序列 是 整个算法的公式(如您正确得出的结论) 因此,您的总和: N +

  • 数字是质数部分

    动态编程是您的朋友。 考虑数字27。 如果7具有5个结果,而20具有732个结果,则您知道27至少具有(732 * 5)个结果。您可以使用两个变量系统(1 + 26、2 + 25 …等),并随便使用预先计算的值。您不必重新计算25或26,因为您已经进行了计算。

  • 寻找最长的非负子数组

    这称为“最长偏差间隔”,是生物学中的常见问题。这是算法(在您的情况下L==0): Input: A nonempty array of n real numbers `A[1 . . . n]` and a lower bound `L`. Output: The start and end index of the longest segment of `A` with sum at

  • n皇后算法的所有可能解

    您应该利用每个皇后必须放在不同列中的事实。如果已经在前k列中放置了k个皇后,则将第k + 1个皇后号递归地放置在k + 1列中,并遍历第1到n行(而不是像现在那样遍历所有n * n个单元格)。为每个有效的位置继续k:= k + 1。这将避免任何重复的结果,因为该算法根本不会生成任何重复的板。 编辑:您如何避免对称性的问题:可以预先避免的一部分,例如,通过在列1到行1限制女王1,… n

  • 查找图中的哈密顿路径数的算法

    根据Wolfram Alpha的说法, …确定给定一般图是否具有哈密顿路径的唯一已知方法是进行详尽搜索 我相信您会想从找到一条哈密顿路径开始,然后将其分为两条路径,使分割点尽可能清楚地将两条路径分开。然后,您可以在子图中找

  • 用于构建和查找整数范围集的数据结构

    关于第二个问题: 您可以在Bloom Filters上查找。布隆过滤器是专门为回答O(1)中的隶属关系问题而设计的,尽管响应是no或maybe((不是像yes no:p那样明确)。 maybecod