leecode 题集

2.给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照
逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        n = ListNode(0)
        s = 0
        node = n
        while l1 or l2 or s:
            n.next = ListNode(s + (0 or l1.val if l1 else 0) + (0 or l2.val if l2 else 0))
            if n.next.val >= 10:
                n.next.val -= 10
                s = 1
            else:
                s = 0
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
            n = n.next
        return node.next
View Code

3.给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
双for循环时间超时

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        nums = []
        n = ''
        if not s:
            return 0
        for i in range(len(s)):
            if s[i] in n:
                nums.append(len(n))
                n = n[n.index(s[i])+1:]
            n += s[i]
            if i == len(s)-1:
                nums.append(len(n))
        return max(nums)
View Code

4.给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        n = nums1 + nums2
        n = sorted(n)
        if len(n) % 2:
            return n[len(n)//2]
        else:
            return (n[len(n)//2]+n[len(n)//2-1])/2
View Code
01-26 16:35