美文网首页
leetcode 算法刷题记录

leetcode 算法刷题记录

作者: superKelly | 来源:发表于2019-03-29 09:03 被阅读0次

    2.addTwoNumbers

    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode dummyHead = new ListNode(0); //new一个ListNode
            //dummyHead是头结点,位置不变,用来返回的
            ListNode p = l1, q = l2, curr = dummyHead;
            //curr是操作节点,用来插入数据
            // System.out.println("p "+p+"\nl1 "+l1);
            //p ListNode@2503dbd3
            //l1 ListNode@2503dbd3
            //p 和 l1指向同一个对象
            // println 的执行,使runtime由1ms升至11ms,尽量少用
            
            int carry = 0;
            while (p != null || q != null) {
                int x = (p != null) ? p.val : 0;
                int y = (q != null) ? q.val : 0;
                int sum = carry + x + y;
                carry = sum / 10;//carry是进位,留给下一个位使用
                curr.next = new ListNode(sum % 10);//创建新节点,加入链表
                curr = curr.next;//操作节点,指向最新的节点
                if (p != null) p = p.next;
                if (q != null) q = q.next;
            }
            if (carry > 0) {
                curr.next = new ListNode(carry);
            }
            return dummyHead.next;
        }
    }
    

    ListNode
    链表的操作对象是节点,链表在内存中的位置不连续。数组的操作对象是数组对象,而不是数组中的元素,在内存中的位置连续。这是两者最大的差别。在java中,链表的操作类是List,并没有像这里用到ListNode。这里使用ListNode是为了加深对链表的理解。

    1. Median of Two Sorted Arrays
      Runtime: 21 ms, faster than 81.27% of Java online submissions for Median of Two Sorted Arrays.
      Memory Usage: 46.7 MB, less than 94.89% of Java online submissions for Median of Two Sorted Arrays.
      寻找中间位置的数字,或其平均值。用for循环来走,两个浮标各从两边往中间走。
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
            int[] newNums = Arrays.copyOf(nums1, nums1.length+nums2.length);
            System.arraycopy(nums2, 0, newNums, nums1.length, nums2.length);
            Arrays.sort(newNums);
            System.out.println(Arrays.toString(newNums));
            int leftPoint = 0;
            int rightPoint = newNums.length-1;
            for(int i = 0;i<newNums.length;i++)
            {
                if(leftPoint==rightPoint-1 || leftPoint==rightPoint)
                {
                   System.out.println("leftPoint:"+leftPoint+"rightPoint:"+rightPoint); System.out.println("leftPoint:"+newNums[leftPoint]+"rightPoint:"+newNums[rightPoint]);
                    return (newNums[leftPoint] + newNums[rightPoint])/2.0;
                    
                }
                leftPoint++;
                rightPoint--;
            }
            return 0;
        }
    

    相关文章

      网友评论

          本文标题:leetcode 算法刷题记录

          本文链接:https://www.haomeiwen.com/subject/xdekbqtx.html