LeetCode 题目知识记录

1.两数之和

遍历、hash、字典

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

enumerate(sequence, [start=0])

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]


>>>seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
...     print i, element
... 
0 one
1 two
2 three

2.两数相加

大神代码风格,膜拜

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

class Solution:
    def addTwoNumbers(self, l1:ListNode, l2:ListNode) -> ListNode:
        dump = p = ListNode(None)
        s = 0
        while l1 or l2 or s:
            s += (l1.val if l1 else 0) + (l2.val if l2 else 0)
            p.next = ListNode(s % 10)
            p = p.next
            s //= 10
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        return  dump.next
s = 5
p = 2
print(s //= p)
## // 代表整除
s = 5
p = 2
print(s /= p)
## / 代表带浮点数除法

3.最大不重复子串

滑动窗口思想

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if not s:return 0
        left = 0
        lookup = set()
        n = len(s)
        max_len = 0
        cur_len = 0
        for i in range(n):
            cur_len += 1
            ## 判断当前这个字符是否在已获得的子串 set 集合中,若是则重复,滑动窗口
            while s[i] in lookup:
                ## 在 set 中删除指定的元素,从子串的左边开始删除
                lookup.remove(s[left]) 
                ## 每次滑动一格,滑动多次完成一回窗口滑动
                left += 1
                cur_len -= 1
            if cur_len > max_len:max_len = cur_len
            lookup.add(s[i])
        return max_len

4.堆知识

Python标准库模块之heapq

https://blog.csdn.net/qq_35883464/article/details/99410423

使用堆的优势:

5.嵌套列表的排序

intervals = [[1,4][0,5]]
intervals_sorted = sorted(intervals,key=lambda x:x[0])

https://blog.csdn.net/chenjun1643/article/details/100710384

6.列表删除 remove 和 del

remove会删除列表中第一个符合 __eq__的元素,可能会误删

del 删除的是对象

https://www.jianshu.com/p/cd50a2482c2d

7.内置函数的时间复杂度

https://wiki.python.org/moin/TimeComplexity

Operation

Average Case

Amortized Worst Case

Copy

O(n)

O(n)

Append[1]

O(1)

O(1)

Pop last

O(1)

O(1)

Pop intermediate[2]

O(n)

O(n)

Insert

O(n)

O(n)

Get Item

O(1)

O(1)

Set Item

O(1)

O(1)

Delete Item

O(n)

O(n)

Iteration

O(n)

O(n)

Get Slice

O(k)

O(k)

Del Slice

O(n)

O(n)

Set Slice

O(k+n)

O(k+n)

Extend[1]

O(k)

O(k)

Sort

O(n log n)

O(n log n)

Multiply

O(nk)

O(nk)

x in s

O(n)

 

min(s), max(s)

O(n)

 

Get Length

O(1)

O(1)

8.传入单个节点,删除单向链表中的该节点:

https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/zhe-shi-yi-ge-kong-bu-ti-a-tai-ke-pa-liao-leetcode/

一般都会传入链表,和待删除节点的参数值,但本题仅传入一个结构体,节点,开拓思路了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值