草庐IT

algorithm

全部标签

java - 用 0-(N-1) 中的唯一数字替换重复数字

背景:我有一个长度为N的正随机数数组,其中肯定包含重复项。例如10,4,5,7,10,9,10,9,8,10,5编辑:N可能是32,或者其他一些与该大小差不多的2的幂。问题:我正在尝试找到用0-(N-1)中缺失的数字替换重复项的最快方法。使用上面的例子,我想要一个看起来像这样的结果:10,4,5,7,0,9,1,2,8,3,6目标是让每个数字从0到N-1都有一个,而不仅仅是用0-(N-1)替换所有数字(随机顺序很重要)。编辑:确定性替换也很重要,即相同的输入将有相同的输出(不是随机的)。我的解决方案:目前在Java中实现,使用2个boolean数组来跟踪已使用/未使用的数字([0,N)

java - 为什么此代码适用于此 TopCoder 概率?

自HOURS以来,我一直在努力思考这个TopCoder问题,但无法找到一个完美的解决方案,并找到了下面给出的一个使用得非常漂亮的解决方案!我想弄清楚这个解决方案如何适用于给定的问题?而我当初怎么会想到呢?阅读解决方案后,我认为它是霍夫曼编码的一种变体,但这是我所能得到的。我真的很着迷,想知道什么样的思路可以导致这个解决方案..问题来了:http://community.topcoder.com/stat?c=problem_statement&pm=11860&rd=15091FoxCielhaslotsofhomeworktodo.Thehomeworkconsistsofsomem

java - "Find common ancestor"的变体

我最近接受了一次电话采访。它涉及将问题编码作为过程的一部分。问题是Findthemostclosestcommonancestorofatree的变体,但有一个扭曲。这棵树很像图,即可以连接子节点。示例:A/B|\CE||DF\/G在这种情况下,给定这棵树和节点F和D,得到的最接近的共同答案将是B。第二个转折点是树以数组的形式呈现。实现方法具有以下输入:publicStringgetCA(String[]nodes,String[][]parentNodes,StringtargetNode1,StringtargetNode2)在这个例子中nodes={"G","F","E","D"

java - 有效地绘制大量粒子

我写了一个粒子系统小程序;目前我正在创建并分别绘制每个粒子。(这里是代码)BufferedImagebackbuffer;Graphics2Dg2d;publicvoidinit(){backbuffer=newBufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);g2d=backbuffer.createGraphics();setSize(WIDTH,HEIGHT);//createstheparticlesfor(inti=0;i它的性能还不错,我可以用20,000个粒子获得大约40FPS(尽管我有一台不错的笔记本电脑)。但

java - 在java中设置间隔

我有一个包含整数值的间隔列表[例如。[1,4],[10,19]等]。有没有办法将这些间隔放入某些java集合的容器中[例如。Set]这样我就可以在容器上调用“联合”函数。'union'函数应该给我一个间隔列表,这样如果任何2个插入的间隔重叠,那么它们应该合并到输出中。我尝试在Guava中使用Range类,但最终在合并之前将所有间隔相互比较。一个优雅的方法将非常感激!这是我根据下面的回复尝试过的。输出是[[1,15],[17,20]],这是正确的。我想知道是否有一些现有的API可以实现类似的功能。publicstaticvoidmain(String[]args){//mockdataL

java - 为什么这种快速排序会导致近排序列表和已排序列表的堆栈溢出?

我目前正在用Java编写一个快速排序算法来对随机整数数组进行排序,然后使用System.nanoTime()对它们进行计时。这些数组的大小是10的幂,从10^3开始到10^7结束。此外,随机列表具有不同的属性。我正在对纯随机列表、具有某些相同值(fewUnique)的列表、反向排序列表、排序列表和几乎排序列表进行排序。排序有效。它以递归方式对数组执行快速排序,直到需要对数组的30个或更少元素进行排序,在这种情况下,它执行插入排序。对于10^3和10^4一切都很好,但是一旦我达到10^5值,它只会对随机列表、少数唯一列表和随机列表进行排序,但在对几乎已排序和已排序列表进行排序时会导致堆栈

java - 通过旋转 2x2 子网格对 3x3 网格进行排序

我正在尝试解决以下问题:给定一个包含数字1-9的3x3网格,例如:283145796我必须通过顺时针或逆时针旋转2x2子网格来对网格进行排序。上面的例子可以这样解决:顺时针旋转左上角:283123145=>485796796逆时针旋转右下角:123123485=>456796789网格现在已“排序”。这是一个家庭作业,但我只是不明白。暴力破解没有用;我必须能够在这对上面的例子有效,但更难的是不行的。谁能指出我正确的方向?我应该从哪里开始?这个问题有名字吗?所有的网格都是3x3,旋转的棋子总是2x2。提前致谢。编辑:忘记提及最重要的事情:我必须找到对网格进行排序的尽可能少的转弯数。编辑2

java - 对编写将一些修改后的皇后型棋子放在 8 x 8 棋盘上的程序感到困惑

对于这个问题:Thesuperqueenisachesspiecethatcanmovelikeaqueen,butalsolikeaknight.Whatisthemaximalnumberofsuperqueensonan8X8chessboardsuchthatnoonecancaptureanother?我想写一个蛮力算法来找到最大值。这是我写的:publicclassMain{publicstaticbooleanchess[][];publicstaticvoidmain(String[]args)throwsjava.lang.Exception{chess=newboo

java - 总和(1/质数[i]^2)> = 1?

在尝试设计算法时,我偶然发现了这个问题。这不是家庭作业。令P_i=前i个素数的数组。现在我需要最小的i这样Sum1/(P_i[n]*P_i[n])>=1.(如果这样的i存在)。第i个素数的近似值是i*log(i)。所以我在Java中尝试了这个:publicstaticviodmain(Stringargs[]){doublesum=0.0;longi=2;while(sum但是上面没有结束,因为它收敛到0.7。但是1/100000000^2在Java中四舍五入为0.0,所以这就是它不起作用的原因。出于同样的原因,如果您将第6行替换为,它甚至不起作用sum+=1.0/(i*i)如果我没记

java - 寻找盆地的时间复杂度

以下算法用于在矩阵中查找盆地。整题如下:2-Dmatrixisgivenwhereeachcellrepresentsheightofcell.Watercanflowfromcellwithhigherheighttolowerone.Abasiniswhenthereisnocellwithlowerheightintheneighbours(left,right,up,down,diagonal).Youhavetofindmaximumsizebasinblock.我已经实现了代码。我正在寻找时间复杂度。在我看来,时间复杂度是O(n*m),其中n和m是矩阵的行和列。请验证。pu