Es ist ein Problem von leetcode.Program ist einfach. Aber ich bin verwirrt, warum Java viel schneller als C++ mit der gleichen Logik läuft? Java-Codes:Warum läuft Java viel schneller als C++ in "Remove Duplicates from Sorted List"?
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) return head;
ListNode runner = head;
while (runner.next != null) {
if (runner.val == runner.next.val) { // duplicate values, make the next as next.next
runner.next = runner.next.next;
} else { // otherwise, advance runner to runner.next
runner = runner.next;
}
}
return head;
}
C++ Code:
ListNode* deleteDuplicates(ListNode* head) {
if(head == NULL || head->next == NULL){
return head;
}
ListNode* index = head;
while(index->next != NULL){
if(index->val == index->next->val){
index->next = index->next->next;
}else{
index = index->next;
}
}
return head;
}
Java Kosten 1ms: https://leetcode.com/discuss/95026/1ms-java-clean-solution
C++ Kosten 12ms: https://leetcode.com/submissions/detail/58563979/
Was ist der Typ von "val"? In Java kopieren Sie einfach einen Verweis auf "val", während Sie in C++ das gesamte Objekt kopieren. Dies könnte der Schlüssel zum Laufzeitunterschied sein. –
Wir haben keine Ahnung, welcher Compiler verwendet wurde, ob Optimierungen verwendet wurden, was der echte Code eigentlich ist (nur Schnipsel), keine Testdaten, nichts. Wir haben nur einen Link zu etwas, das "Leetcode" genannt wird, und ihre Ansprüche. – PaulMcKenzie
Und sind Sie sicher, dass 'runner.val == runner.next.val' wirklich das leistet, was Sie von Java erwarten? Es vergleicht die Referenzen, nicht ihre Werte. –