草庐IT

algorithm

全部标签

java - 哪种算法可以更快地检查某个位是否已设置?

我正在制作一款游戏,其中我将大量数据存储在一个整数或长整数中,因为我将拥有大量数据。出于性能原因,我不想使用整个类,也不需要它们。我找到了两种从整数中检索一位的方法。我想知道是否有人知道我应该使用哪个或者哪个更快。方法:return(integer&(1return(integer>>bit&0x1)==1; 最佳答案 很可能您正在测试的位比您正在测试的整数“更稳定”。因此,您可以为位设置常量,这意味着您只需进行一次移位。例如:staticfinalintLEFT_WALL=1然后在你的循环中,你只是检查if((integer&LE

java - 理解双重递归

如果一个函数中只有一个递归调用,我就能很容易地理解递归。但是,当我在同一个函数中看到两个或多个递归调用时,我真的很困惑。示例:intMaximumElement(intarray[],intindex,intn){intmaxval1,maxval2;if(n==1)returnarray[index];maxval1=MaximumElement(array,index,n/2);maxval2=MaximumElement(array,index+(n/2),n-(n/2));if(maxval1>maxval2)returnmaxval1;elsereturnmaxval2;}我

java - 查找数组中 3 个数字的最大乘积

给定一个整数数组,它可以同时包含+ve和-ve数字。我必须最大化数组中任意3个元素的乘积。元素可以是不连续的。一些例子:int[]arr={-5,-7,4,2,1,9};//MaxProductof3numbers=-5*-7*9int[]arr2={4,5,-19,3};//MaxProductof3numbers=4*5*3我已经尝试使用动态编程解决它,但我没有得到预期的结果。它返回的结果通常在乘法中涉及相同的数字两次。所以,对于数组-{4,2,1,9},它正在返回-32,即4*4*2.这是我的代码:publicstaticintmaxProduct(int[]arr,intcou

java - Collections.binarySearch() 与 List indexOf()

我有一个包含超过37K项的列表,并且我已经实现了hashCode()、equals(),所以我想知道Collections.binarySearch()可以帮助提高性能并且比indexOf()方法更快。 最佳答案 如果您的集合已排序,binarySearch()将是O(logn)而不是indexOf()的O(n),您肯定会看到一个改进。 关于java-Collections.binarySearch()与ListindexOf(),我们在StackOverflow上找到一个类似的问题:

java - 打印二进制排列列表

我想做的是打印一个二进制数n位长的所有可能性。换句话说,使用4位数字:0001001001001000..等等老实说,我什至不知道从哪里开始(除了我认为我需要使用一个循环,可能还需要一个数组),所以任何指向正确方向的指示都将不胜感激。 最佳答案 也许你可以使用递归算法:publicvoidprintBin(StringsoFar,intiterations){if(iterations==0){System.out.println(soFar);}else{printBin(soFar+"0",iterations-1);print

java - Reverse Integer leetcode -- 如何处理溢出

问题是:反转整数的数字。示例1:x=123,返回321示例2:x=-123,返回-321您是否注意到反转后的整数可能会溢出?假设输入是一个32位整数,那么1000000003的逆运算就会溢出。你应该如何处理这种情况?抛出异常?很好,但是如果抛出异常不是一个选项怎么办?然后您将不得不重新设计该函数(即,添加一个额外的参数)。我从网站上搜索到的解决方案是:publicclassSolution{publicstaticintreverse(intx){intret=0;booleanzero=false;while(!zero){ret=ret*10+(x%10);x/=10;if(x==

c# - 编程语言(Java/C#/C++/Python/…)中不同构造的速度

我的老板刚刚告诉我,他从一本书中学到了快速的VB6算法,并且编写东西的最短方法不一定是最快的(例如,内置方法有时比自己编写的方法慢得多,因为它们会进行各种检查或在您的情况下可能不需要unicode转换)。现在我想知道,是否有一个网站提供各种语言的快速不同结构的信息,尤其是。Java/C#/Python/…(还有C++,但编译器太多,可能差异很大)。例如有区别吗if(a())b();和a()&&b();另一个例子:是a=a*4可能编译为与a相同的代码?当然,我可以自己测试一下,同时编写它们然后运行它们100000次并比较运行时间,但我也想学习新的编写方法,甚至可能是我以前没有考虑过的东西

java - 计算文件中的单词数

我在计算文件中的字数时遇到问题。我采用的方法是,当我看到一个空格或一个换行符时,我就知道要数一个字了。问题是,如果我在段落之间有多行,那么我最终也会将它们计为单词。如果您查看readFile()方法,您就会明白我在做什么。你能帮我解决这个问题并指导我正确的方向吗?示例输入文件(包括一个空行):wordwordwordwordwordwordwordword 最佳答案 您可以将Scanner与FileInputStream一起使用,而不是将BufferedReader与FileReader一起使用。例如:-Filefile=newFi

java - 汉诺塔解决方案优于 O(2^n)?

对于运行时间小于O(2n)的TowersofHanoi是否有解决方案,其中n是磁盘数移动?我的解决方案需要O(2n)时间。此外,下面的解决方案是递归的。我们可以使用具有内存概念的动态规划在更短的时间内解决这个问题吗?publicvoidtowersOfHanoi(intnum,MyStackfrom,MyStackto,MyStackspare){if(num==1){inti=from.pop();to.push(i);System.out.println("Move"+i+"from"+from.getName()+"to"+to.getName());return;}towers

java - 排序 50 000 000 个数字

假设我们需要对50000000个数字进行排序。假设这些数字存储在一个文件中。解决这个问题最有效的算法是什么?排序的并行算法...怎么做?也许有用的链接)我不会用标准算法所以我问你方法和算法:)好的..我读到了关于并行归并排序的内容...但我并不清楚。解决方案,第一个版本codeislocatedhere 最佳答案 5000万不算特别多。我只是将它们读入内存。将它们分类并写出来。它应该只需要几秒钟。你需要多快?您需要它有多复杂?在我的旧labtop上花了28秒。如果我有更多的处理器,它可能会快一点,但大部分时间都花在读取和写入文件上(