- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通读盖尔·麦克道尔 (Gayle Mcdowell) 的《破解编程面试》一书,并发现了针对第 2 节链接列表中的问题之一的替代解决方案。具体来说就是问题#2.1
Remove dups: Write code to remove duplicates from an unsorted linked list. How would you solve this problem if a temporary buffer is not allowed.
Example input = [1,2,2,6,4,4,2]
Example output = [1,2,6,4]
作者在书中给出的答案如下:基本上,它保留“指针”,一个通过链表进行交互,另一个检查所有后续节点是否有重复项:
public void deleteDups(Node head) {
Node current = head;
while (current != null) {
Node runner = current;
while (runner.next != null) {
if (runner.next.data == current.data) {
runner.next = runner.next.next;
} else {
runner = runner.next;
}
}
current = current.next;
}
}
我使用了递归,我的代码看起来有点不同,尽管(我相信)做了同样的事情:
public void removeRepetites(Node head) {
if (head == null) return;
int dataToRemove = head.data;
while (head.next != null) {
if (head.next.data == dataToRemove) {
head.next = head.next.next;
} else {
removeRepetites(head.next);
head = head.next;
}
}
}
你能发现我解决问题的方法有什么缺点吗?也许是更高的 O 空间/时间复杂度?
谢谢!
最佳答案
您的代码将如何处理包含 1,000,000 个唯一项目的列表?
假设没有编译器或运行时优化,您的代码将出现堆栈溢出。
这就是尾递归更好地优化为循环的原因。我想,如果你当时这么做了,那就像是书中的答案。
关于java - 从未排序的链表中删除重复项,破解编码面试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35843149/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!