Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于LinkedList的效率查询_Java - Fatal编程技术网

Java 关于LinkedList的效率查询

Java 关于LinkedList的效率查询,java,Java,我正在解决这个问题,尽管我找到了解决方案,但我还是对一个方面感到困惑 // * Definition for singly-linked list. // * public class ListNode { // * int val; // * ListNode next; // * ListNode() {} // * ListNode(int val) { this.val = val; } // * ListNode(int val,

我正在解决这个问题,尽管我找到了解决方案,但我还是对一个方面感到困惑

//  * Definition for singly-linked list.
//  * public class ListNode {
//  *     int val;
//  *     ListNode next;
//  *     ListNode() {}
//  *     ListNode(int val) { this.val = val; }
//  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
//  * }
//  */

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode dummy = head;
        int sum = 0;
        int carry = 0;

        while(l1 != null || l2 != null){
            // check if either is not null
            // used to handle cases where one input linkedlist might be empty or shorter than other
            // if condition is true, x = l1.val else x = 0
            int x = (l1 != null) ? l1.val : 0;
            int y = (l2 != null) ? l2.val : 0;

            sum = carry + x + y;
            dummy.next = new ListNode(sum % 10)

            // carry = sum/10;
            carry = (sum >= 10) ? 1 : 0;
            
            if(l1 != null){
                l1 = l1.next;
            }

            if(l2 != null){
                l2 = l2.next;
            }

            dummy = dummy.next;
        }

        if(carry == 1){
            dummy.next = new ListNode(carry);
        }

        return head.next;
    }
}

我发现进位=(和>=10)?1:0比进位=和/10更有效。
我所说的更好,是指它使我的代码更加高效,这是我唯一做的更改。任何人都能理解为什么会这样。

主要原因是比较运算比除法运算快得多。各种操作的复杂性在本页中有很好的说明。除法算法的复杂性也取决于编译器执行除法所使用的方法。但无论如何,就复杂性而言,比较运算比除法运算便宜。

主要原因是比较运算比除法运算快得多。各种操作的复杂性在本页中有很好的说明。除法算法的复杂性也取决于编译器执行除法所使用的方法。但无论如何,就复杂度而言,比较比除法更便宜。

您是如何衡量执行时间以得出此结论的?哦,我在leetcode上解决了这个问题,它告诉您,当您提交时,请忽略此问题。Leetcode并没有给你准确的时间安排。你是如何衡量执行时间来得出这个结论的?哦,我在Leetcode上解决了这个问题,它告诉你,当你提交的时候。忽略这个。Leetcode不能给你精确的计时。被常数除法可以并且被jit编译器大量优化。最终结果甚至不进行除法运算,而是简化为乘法和一些更便宜的运算。另一方面,这是非常昂贵的。实际上还不清楚哪种方法在实践中会更快。很可能op没有正确测量运行时间。顺便说一句,听起来你把Java和Javascript搞混了。谢谢你指出这一点,我现在已经把它变得更一般化了。尽管如此,就cpu周期而言,比较操作比除法更便宜。尽管我们无法比较这些操作,因为它们都用于执行不同的操作。乘法和除法是比较合适的选择,因为它们是相互关联的。考虑到除以常数,是的,它确实改变了复杂性。但考虑到,与常量的比较也是如此。谢谢大家,令人惊讶的澄清。事实上,伙计们,这很奇怪,但我只是尝试运行,Leetcode在每次运行时都会给出不同的运行时间。被常量除法可以并且被jit编译器大量优化。最终结果甚至不进行除法运算,而是简化为乘法和一些更便宜的运算。另一方面,这是非常昂贵的。实际上还不清楚哪种方法在实践中会更快。很可能op没有正确测量运行时间。顺便说一句,听起来你把Java和Javascript搞混了。谢谢你指出这一点,我现在已经把它变得更一般化了。尽管如此,就cpu周期而言,比较操作比除法更便宜。尽管我们无法比较这些操作,因为它们都用于执行不同的操作。乘法和除法是比较合适的选择,因为它们是相互关联的。考虑到除以常数,是的,它确实改变了复杂性。但考虑到,与常数的比较也是如此。谢谢你们,令人惊讶的澄清。事实上,伙计们,这很奇怪,但我只是尝试运行,Leetcode在每次运行时给出不同的运行时间。