草庐IT

algorithm

全部标签

java - 检查字符串是否由唯一字母组成的最简单方法?

我需要在Java中检查单词是否由唯一字母组成(不区分大小写)。由于直接的解决方案很无聊,我想出了:对于字符串中的每个字符,检查是否indexOf(char)==lastIndexOf(char)。将所有字符添加到HashSet并检查设置大小是否==字符串长度。将字符串转换为char数组,按字母顺序排序,遍历数组元素并检查是否c[i]==c[i+1]。目前我最喜欢#2,似乎是最简单的方法。还有其他有趣的解决方案吗? 最佳答案 我不喜欢1。--这是一个O(N2)算法。你的2.大致是线性的,但总是遍历整个字符串。你的3.是O(Nlg2N)

java - 带路径压缩算法的加权快速联合

有一个“带路径压缩的加权快速联合”算法。代码:publicclassWeightedQU{privateint[]id;privateint[]iz;publicWeightedQU(intN){id=newint[N];iz=newint[N];for(inti=0;i问题:路径压缩是如何工作的?id[i]=id[id[i]]意味着我们只到达我们节点的第二个祖先,而不是根。iz[]包含从0到N-1的整数。iz[]如何帮助我们知道集合中的元素数量?有人可以为我澄清一下吗? 最佳答案 首先要明白id是一个森林。id[i]是i的父级。如

java - 给定一个未排序的数组,在 O(n) 时间内找到 A[j] - A[i] 的最大值,其中 j>i..

这是一个Amazon面试问题。我已经使用动态在O(n)中解决了这个问题编程。但我想知道是否有比O(n)更多的优化例如假设下面是数组371424returns454321returnsNothing43223returns1这是我写的代码Code 最佳答案 假设您有intA[N]。intres=-1;intmin_value=A[0];for(inti=1;i复杂度O(N)。您需要检查N个元素,因此O(N)是您能得到的最好结果。 关于java-给定一个未排序的数组,在O(n)时间内找到A[

java - 我可以使这个功能更有效吗(欧拉计划 9)?

我刚刚完成了欧拉计划问题9(警告剧透):APythagoreantripletisasetofthreenaturalnumbers,a这是我的解决方案:publicstaticintspecPyth(intnum){for(inta=1;a我忍不住想到有一个只涉及一个循环的解决方案。有人有想法吗?我更喜欢只使用一个循环的答案,但任何比我目前拥有的更有效的东西都会很好。 最佳答案 ifa+b+c=1000然后a+b+sqroot(a²+b²)=1000->(a²+b²)=(1000-a-b)²->a²+b²=1000000-2000

java - 打印列表的所有可能子集

我有一个元素列表(1,2,3),我需要获取该列表的超集(幂集)(没有重复元素)。所以基本上我需要创建一个列表列表,如下所示:{1}{2}{3}{1,2}{1,3}{2,3}{1,2,3}什么是最好的(在这种情况下简单>效率,列表不会很大)实现这个的方法?最好使用Java,但使用任何语言的解决方案都会很有用。 最佳答案 使用位掩码:intallMasks=(10)//Thej-thelementisusedSystem.out.print((j+1)+"");System.out.println();}这里是所有的位掩码:1=001=

java - 打印目录树

我必须打印目录树(如树命令),示例:.+---A|+---IMAGES|+---BACKUP+---ADOKS|+---ROZDZIAL_2|+---ROZDZIAL_3|+---ROZDZIAL_4+---AMSC2005|+---AMSC2004+---FCCS2005|+---source|+---TMP+---LODZ2004+---ZAKOPANE2004+---DYDAKTYKA|+---DYDAKTYKA_ISI||+---COLLS|||+---Q1|||+---Q2|||+---RAZEM|||+---RYSUNKI_COLL1|||+---RYSUNKI_COLL2

java - 剪刀石头布的可扩展解决方案

刚刚经历了游戏的变体:Rock-Paper-Scissor-Lizard-Spock我已经为传统的R-P-S问题编写了Java代码,但是当我尝试为游戏的新版本(R-P-S-L-S)扩展我的代码时..我觉得我的代码非常糟糕。这是一个片段:if(player1.equals("ROCK")&&player2.equals("SCISSORS")){winner=1;}//Papercoversrock...elseif(player1.equals("PAPER")&&player2.equals("ROCK")){winner=1;}//Scissorscutpaper...elseif

java - 证明 : why does java. lang.String.hashCode() 的实现与其文档相匹配?

java.lang.String.hashCode()的JDK文档famously说:ThehashcodeforaStringobjectiscomputedass[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-1]usingintarithmetic,wheres[i]isthe*i*thcharacterofthestring,nisthelengthofthestring,and^indicatesexponentiation.这个表达式的标准实现是:inthash=0;for(inti=0;i看着这个让我觉得我正在通过我的算法类(class)sleep。

java - 性能问题 : Fastest way to convert hexadecimal char to its number value in Java?

我想将表示十六进制值(大写或小写)的字符转换为字节,例如'0'->0,'1'->1,'A'->10,'a'->10,'f'->15etc...我会非常频繁地调用此方法,因此性能很重要。有没有比使用预初始化的HashMap更快的方法?从中获取值(value)?回答这似乎是在使用switch-case和JonSkeet的直接计算解决方案之间的折腾-不过,switch-case解决方案似乎略有优势。Greg的数组方法胜出。以下是各种方法运行200,000,000次的性能结果(以毫秒为单位):Character.getNumericValue:8360Character.digit:8453H

java - 打印由给定函数计算的每个级别的特定节点

在一次面试中,我被赋予了一个功能:f(n)=square(f(n-1))-square(f(n-2));forn>2f(1)=1;f(2)=2;Herenisthelevelofann-arraytree.f(n)=1,2,3,5,16...对于给定N-Array的每个级别n我必须在每个级别打印f(n)节点。例如:Atlevel1printnodenumber1(i.e.root)Atlevel2printnodenumber2(fromleft)Atlevel3printnodenumber3(fromleft)Atlevel4printnodenumber5...andsoon如果