LeetCode 边学python边练算法(持续更新)

LeetCode 边学python边练算法(持续更新)

1、两数之和

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
示例 1:
nums1 = [1, 3]
nums2 = 2
中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5

我的代码

class Solution:
    def twoSum(self, nums, target):
        """ :type nums: List[int] :type target: int :rtype: List[int] """
        end=0
        map = {}
        key = 0
        for num in nums:
            if target-num in map :
                key = target-num
                break
            else:
                map[num] = end;
            end+=1

        start = map[key]
        result = [start,end]
        return result

知识点

字典

  • 定义

    map = {}

  • 遍历

  • 存数据
  • 取数据

数组

  • 定义
  • 遍历
  • 存数据
  • 取数据

2、两数相加

给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

我的代码

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution:
    def addTwoNumbers(self, l1, l2):
        """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """
        pro = 0
        res = ListNode(0)
        temp = res
        while l1 is not None or l2 is not None :
            d1 ,d2 = 0,0
            if l1 is not None :
                d1 = l1.val
                l1 = l1.next
            if l2 is not None:
                d2 = l2.val
                l2 = l2.next
            d = d1+d2+pro
            pro = d//10
            if d>= 10:
                temp.val = d-10
            else:
                temp.val = d
            if l1 is not None or l2 is not None:
                temp.next = ListNode(0)
                temp = temp.next 
        if pro > 0 :
            temp.next = ListNode(pro)
        return res

知识点

结构体

3、无重复字符的最长子串

给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。
给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。
给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,”pwke” 是 子序列 而不是子串。

我的代码

class Solution:
    def lengthOfLongestSubstring(self, s):
        """ :type s: str :rtype: int """
        now = 0
        temp = ""
        last = 0
        maxStr = ""
        for c in s:
            if c in temp:
                last = last + temp.index(c) + 1
            temp = s[last:now+1]
            if len(temp) > len(maxStr) :
                maxStr = temp
            now = now+1
        return len(maxStr)

知识点

字符串

4、两个排序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
示例 1:
nums1 = [1, 3]
nums2 = 2
中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5

我的代码(未通过 )

class Solution:
    def findMedianSortedArrays(self, nums1, nums2):
        """ :type nums1: List[int] :type nums2: List[int] :rtype: float """
        length = len(nums1) + len(nums2)
        start = 1
        end = length
        i,j,k,t = 0,len(nums1)-1,0,len(nums2)-1
        if len(nums1) == 0 or len(nums2) == 0 or nums1 == nums2:
            if len(nums1) != 0 and len(nums2) == 0:
                temp = nums1
            elif len(nums2) != 0 and len(nums1) == 0:
                temp = nums2
            else:
                temp = nums1
            length = len(temp)
            if length == 1:
                return temp[0]
            if length % 2 == 0:
                return (temp[length//2 - 1] + temp[length//2])/2
            else:
                return temp[length//2]
        else:
            while True:
                if (length % 2 == 0 and start + 1 == end) or (length % 2 == 1 and start == end):
                    middle =  nums1[i] + nums1[j] +nums2[k] + nums2[t]
                    return middle/4
                if (nums1[j] >= nums2[t] and j > 0):
                    j = j-1
                    end = end-1
                if (nums1[j] < nums2[t] and t > 0):
                    t = t-1
                    end = end-1
                if (nums1[i] >= nums2[k] and k < len(nums2)-1 ):
                    k = k+1
                    start = start+1
                if (nums1[i] < nums2[k] and i < len(nums1)-1 ):
                    i = i+1
                    start = start+1
点赞