草庐IT

algorithm

全部标签

java - 困惑 - 二叉树的高度

我对二叉树计算高度的逻辑有些迷惑。代码1publicstaticintfindHeight(Treenode){if(node==null)return0;else{return1+Math.max(findHeight(node.left),findHeight(node.right));}}代码2publicstaticintfindHeight(Treenode){if(node==null)return-1;else{return1+Math.max(findHeight(node.left),findHeight(node.right));}}我认为,第二个是正确的,因为它给

java - 在带圆的二维空间中为任意点 [x,y] 寻找圆的最近自由位置

我正在制作一款游戏,用户玩家可以在屏幕上放置圆圈。重要的是圆圈永远不会重叠,所以我需要找出距离光标最近的可能空闲点。我找到了圆包装算法,但它们似乎不适合我的问题。我过去也解决过类似的盒子问题(here),但对于圆圈,我似乎无法弄清楚。我想出了如何找到最近的自由位置,当它与一个圆相交时,甚至当两个圆相交时。但是,我找不到可以处理在任何排列中具有任何个圆圈的复杂情况的稳健算法。问题的具体描述:我有一个2D空间,其中包含任意数量的不相交圆圈,所有圆圈都具有相同的半径(尽管这可能无关紧要)。我想为下一个圆找到一个位置,使其不与任何其他圆相交,并且中心[x,y]最接近指定位置[x,y]。感谢任何

java - Java(或任何语言)概率中的随机洗牌

这个问题在这里已经有了答案:Whatdistributiondoyougetfromthisbrokenrandomshuffle?(10个答案)关闭7年前。所以,我正在Coursera上观看RobertSedgewick的视频,目前正在洗牌。他展示了一个“写得不好”的在线扑克洗牌代码(它还有一些其他错误,我已经删除了这些错误,因为它们与我的问题无关)算法是这样工作的:for(inti=0;i它对所有卡片进行一次迭代。在每次迭代中生成一个随机数,并将第i张卡与第r张卡交换。很简单,对吧?虽然我懂算法,但是我不懂他的概率计算。他说因为Random使用32位种子(或64位,这似乎无关紧要)

java - 内存不足错误 : Java heap space when trying to read large file

我正在尝试读取大文件(大约516mb),它有18行文本。我试着自己写下代码,在尝试读取文件时在第一行代码中出错:try(BufferedReaderbr=newBufferedReader(newFileReader("test.txt"))){Stringline;while((line=br.readLine())!=null){StringfileContent=line;}}注意:文件存在且大小约为516mb。如果有另一种更安全更快的读取方法请告诉我(即使它会换行)。编辑:在这里我尝试使用Scanner,但它持续的时间稍长,然后给出相同的错误try(BufferedReader

java - k 个不同因子与最大可能因子 n 的可能乘法

让M(n,k)是总和所有可能的乘法的k独特与的因素最大可能的因素,其中订单无关.例如,M(5,3)=225,因为:1*2*3=61*2*4=81*2*5=101*3*4=121*3*5=151*4*5=202*3*4=242*3*5=302*4*5=403*4*5=606+8+10+12+15+20+24+30+40+60=225。人们很容易注意到有C(n,k)这样的乘法,对应于可以选择的方式数k对象外可能的对象。在上面的例子中,C(5,3)=10确实有10个这样的乘法,如上所述。问题也可以尽量形象化n尺寸完全包含的集合k0,其中每个不包含0的单元格的值是索引+1在里面。例如,一种可能

java - 对对象进行分组的算法

我有以下类(class):classSport{privateStringsportsName;privateListpeopleWhoPlayThisSport;//...}classPeople{privateStringname;privatelonguniqueId;//...}我的输入是一个运动对象列表,为简单起见,请考虑以下示例:sport1-Football,sport2-Basketball,sport3-Baseball,sport4-Hockey,sport5-Soccer,我必须创建一个List>,使得内部列表是所有至少有1个普通玩家的运动(传递属性适用于此处)。

java - 破解编码面试,第 6 版,2.8

问题陈述:给定一个循环链表,实现一个返回循环开始处节点的算法。答案键给出了比我建议的更复杂的解决方案。我的怎么了?:publicstaticNodeloopDetection(Noden1){ArrayListnodeStorage=newArrayList();while(n1.next!=null){nodeStorage.add(n1);if(nodeStorage.contains(n1.next)){returnn1;}else{n1=n1.next;}}returnnull;} 最佳答案 您的解决方案是O(n^2)时间(

java - 算法 - 查找循环世界中重叠间隔的持续时间(24 小时)

我一直在尝试找出用于查找两个时间范围之间重叠小时数的算法,例如:应该返回12。和应该返回4。所以请帮我填补创建以下函数的空白:publicstaticLongfindOverlappingInterval(LongstartTime1,LongendTime1,LongstartTime2,LongendTime2){//Anysuggestions?}谢谢。编辑:我知道创建两个二进制数组的解决方案,使用AND并对结果求和。含义:但这对我的特定需求没有帮助,因为我想将算法的思想用于solr查询,所以使用数组和二元运算符不是我的选择。 最佳答案

java - Java中游戏实体位置的高效映射

在Java(Swing)中,假设我有一个2D游戏,屏幕上有各种类型的实体,例如玩家、坏人、Prop等。当玩家在屏幕上移动时,顺序为了有效地检查玩家附近的事物,我想我希望根据角色的位置对角色附近的事物进行索引访问。例如,如果玩家“P”在以下示例中踏上元素“E”...||||||||||P|||||E|||||||||...会做类似的事情:if(player.getPosition().x==entity.getPosition().x&&entity.getPosition.y==thing.getPosition().y){//dosomething}这很好,但这意味着实体保持其位置,

java - 可互换的键/值 HashMap Set 结构

背景使用两个操作数创建一系列SQLJOIN语句:主要操作数和次要操作数。JOIN语句的一般形式是:JOINprimaryprimaryON(secondary.id==primary.id)问题代码当前遍历主要和次要操作数的列表,如下所示:for(BundleprimaryOperand:bundleComparators){for(BundlesecondaryOperand:sortedBundles){问题在于嵌套循环生成以下内容:JOINprimaryprimaryON(secondary.id==primary.id)JOINsecondarysecondaryON(prim