这不是作业,这是一个面试问题.
这里的问题是算法应该是恒定的空间.我对如何在没有堆栈的情况下做到这一点非常无能为力,我会发布我使用堆栈编写的内容,但无论如何它都不相关.
这是我尝试过的:我试图进行预订遍历,然后我到了最左边的节点,但我被困在那里.我不知道如何在没有堆栈/父指针的情况下"recurse"备份.
任何帮助,将不胜感激.
(我将它标记为Java,因为这是我很习惯使用的,但它显然是语言无关的.)
PS:我理解"真实"与真实之间的区别.
编辑:我也理解Boolean.TRUE是原语true的包装器,我的问题是 - 为什么原语boolean接受Boolean.TRUE作为值?例如,
boolean boolVar = Boolean.TRUE;
Run Code Online (Sandbox Code Playgroud)
似乎是一个有效的陈述.
我正在寻找一个Java解析器,它可以解析用SGML格式化的文档.
对于重复的监视器:我知道讨论这个主题的另外两个线程: 使用SGML Java SGML 解析Java String 到XML转换? 但两者都没有解决方案,因此也是新主题.
对于那些将XML与SGML混淆的人:请阅读:http://www.w3.org/TR/NOTE-sgml-xml-971215#null (简而言之,有足够的细微差别至少使它无法使用它香草形式)
对于那些喜欢向Google发贴海报的人:我已经做过了,而我能提出的最接近的是广受欢迎的SAXParser:http://download.oracle.com/javase/1.4.2/docs/api/javax /xml/parsers/SAXParser.html 但这当然是一个XML解析器.我正在四处寻找是否有人实施了SAX Parser的修改以适应SGML.
最后,我不能使用SX,因为我正在寻找Java解决方案.
谢谢!:)
我有使用乘法和加法的方法,但我只是无法理解它们.它们都来自外部网站而不是我自己的网站:
public static void bitwiseMultiply(int n1, int n2) {
int a = n1, b = n2, result=0;
while (b != 0) // Iterate the loop till b==0
{
if ((b & 01) != 0) // Logical ANDing of the value of b with 01
{
result = result + a; // Update the result with the new value of a.
}
a <<= 1; // Left shifting the value contained in 'a' by 1.
b >>= 1; // Right shifting …Run Code Online (Sandbox Code Playgroud) java bit-manipulation multiplication addition bitwise-operators
这是一个受欢迎的访谈问题,我可以在这个主题上找到的唯一一篇文章来自TopCoder.对我来说不幸的是,从面试答案的角度看,它看起来过于复杂.
除了绘制两个节点的路径并推断祖先之外,是否有更简单的方法可以做到这一点?(这是一个很受欢迎的答案,但是面试问题的变化需要一个恒定的空间答案).
可能重复:
为什么1 >> 32 == 1?
-1作为转换为二进制的int由32 1表示.当我右移31次时,我得到1(31 0和1).但当我右移32次时,我再次得到-1.它不应该等于0吗?
是否有可能在Python中匹配2个正则表达式?
例如,我有一个用例,我需要比较两个这样的表达式:
re.match('google\.com\/maps', 'google\.com\/maps2', re.IGNORECASE)
Run Code Online (Sandbox Code Playgroud)
我希望返回一个RE对象.
但显然,Python期望一个字符串作为第二个参数.有没有办法实现这一点,或者它是正则表达式匹配的工作方式的限制?
背景:我有一个匹配字符串的正则表达式[r1,r2,r3,...]列表,我需要找出哪个表达式是给定字符串中最具体的匹配.我认为我可以使其工作的方式是:
(1)将r1与r2匹配.
(2)然后将r2与r1匹配.
如果两者都匹配,我们就会有"平局".如果只有(1)工作,则r1是比r2"更好"的匹配,反之亦然.
我在整个列表中循环(1)和(2).
我承认它有点包围(主要是因为我的描述可能不连贯),但我真的很感激,如果有人能给我一些洞察我如何实现这一目标.谢谢!
问:链表的每个节点都有一个随机指针(除了下一个指针),它可以随机指向另一个节点或为空.你会如何复制这样的链表?
答:这就是我所拥有的,我只是想批准这是否是最佳方式.
由于没有指定空间限制,我将使用a LinkedHashSet和a LinkedHashMap(我可以想象人们已经在分歧中点头;))
第一次迭代:显而易见 - 从列表中读取每个节点以进行复制并在新列表上创建节点.然后,像这样读取随机节点:this.random.data并插入到LinkedHashSet.
第二次迭代:遍历新列表并将每个节点的数据添加为第一列,将节点本身作为第二列添加到LinkedHashMap(不必是链接,但我只是使用流程).
第三次迭代:迭代LinkedHashSet(这就是为什么需要链接 - 可预测的排序)和新列表同时进行.对于第一个节点,读取其中的第一个条目,在其中LinkedHashSet查找相应的对象LinkedHashMap,并将其作为随机节点添加到新列表中的当前节点.
3次迭代似乎有点疯狂,但尝试将复杂性保持为O(N).任何改进O(3N)空间要求和O(3N)运行时复杂性的解决方案都会很棒.谢谢!
编辑:进入LinkedHashSet时可以删除该条目LinkedHashMap,因此这只需要O(2N)空间.
Java代码约定说:
应使用四个空格作为压痕的单位.
但它没有任何解释为什么空间是首选.如果我输入空格4次而不是仅按一次标签,我必须按3次以上按键.这意味着需要做更多工作,因为编码人员会在一天内编写大量代码.那么这个约定来自哪里,有没有合理的理由去做更多工作?
LinkedList对element()方法和getFirst()方法有类似的描述(奇怪的是 - 不一样的单词).
Deque 明确指出两种方法在返回值和异常方面是相同的.
我的问题是 - 为什么有两个相同的方法?它是为了向后兼容吗?一种方法比另一种更有效吗?
java ×9
binary-tree ×2
linked-list ×2
addition ×1
algorithm ×1
bit-shift ×1
boolean ×1
coding-style ×1
python ×1
regex ×1
sgml ×1
traversal ×1