1.leetcode题目
3题:力扣
2.读书笔记
1.1
题干:
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度
思路:
用滑动窗口,右指针移动,并把不重复元素append到occ中,遇到重复时更新ans,且左指针移动一次,同时remove,occ的s[left]
源码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
occ = set() #set()创建一个无序不重复的元素集
n = len(s)
right, ans = 0, 0
for left in range(n):
while right < n and s[right] not in occ: #右指针遍历且不再occ中
occ.add(s[right]) #把新元素添加到occ中,right指针向右移动一位
right += 1
if len(occ) > ans: #刷新ans
ans = len(occ)
occ.remove(s[left]) #左指针移动一次,occ移出最左边的元素
return ans
2.读书笔记《fluent python》
map(function,iterable)
def square(x):
return x**2
map(square,[1,2])
----<map object at 0x100d3d550>
list(map(square,[1,2]))
----[1,4]
list(map(lambda x: x**2, [1, 2]))
----[1,4]
生成器表达式:遵循了迭代器协议,能够节省内存。类似于列表,只是把方括号换成圆括号
ord(c):返回c的ascii数值,十进制
ord(‘a’)
----97
元组:不可变列表,没有字段名的记录:元组中的每个元素都存放了一个字段的数据,外加这个字段的位置
list.sort:就地排序列表,不会把原列表复制一份,返回值是none。
(如果一个函数或方法对对象就地改动,返回值是none。例如random,shuffle)
sorted:建立一个列表作为返回值,接受任何形式的可迭代对象作为参数
参数,reverse,key
reverse默认是flase,true时以降序输出
key排序算法以来的对比关键字。
fruits = [‘grape’,’raspberry’,’apple’,’banana’]
sorted(fruits, key=len, reverse=True)
----[‘raspberry’, ’banana’, ‘grape’, ’apple’]
存放浮点数时,数组在背后存的不是float对象,而是数字的机器翻译
数组从文件读取和存入文件的方法:.frombytes .tofile
from array import array #引入array类型
from random import random
froats = array(‘d’,(random() for i in range(10**7))) #利用一个迭代对象来建立一个双精度浮点数组
floats[-1]
----0.0257907358
fp = open(‘float.bin’, ‘wb’)
float.tofile(fp) #把数组存入一个二进制数组里
fp.close()
floats2 = array(‘d’)
fp = open(‘floats.bin’, ‘rb’)
float2.fromfile(fp, 10**7) #把10**7个浮点数从二进制文件里读出
fp.close()
floats2[-1]
----0.0257907358
floats2 == floats
----True
colections.deque类(双端队列)是一个线程安全,可以快速从两端添加或者删除的数据类型。
maxlen是一个可选参数,代表这个队列可以容纳的元素的数量,一旦设定,这个属性不能修改
dp.rotate()队列的旋转参数n,当n>0,队列的最右边的n个元素会被移动到队列的左边,当n<0时,最左边的n个元素会被移动到右边
extendleft(iter)方法会把迭代器里面的元素逐个添加到双向队列的左边
from collections import deque
dp = deque(range(10), maxlen = 10)
dp
----deque([0,1,2,3,4,5,6,7,8,9], maxlen =10)
dp.rotate(3)
dp
deque([7,8,9,0,1,2,3,4,5,6], maxlen=10)
dp.rotate(-4)
dp
----deque([0,1,2,3,4,5,6,7,8,9], maxlen =10)
dp.appendleft(-1)
dp
----deque([-1,1,2,3,4,5,6,7,8,9], maxlen =10)
dp.extend([11, 22, 33])
dp
----deque([3, 4, 5, 6, ,7, 8, 9, 11, 22, 33], maxlen = 10)
dp.extendleft([10, 20, 30, 40])
dp
----deque([40,30, 20, 10, 3, 4, 5, 6, 7, 8], maxlen =10)
python序列可分为,可变和不可变序列或扁平序列和容器序列
扁平序列:体积小,速度快,用起来简单,只能保存原子性数据(数字,字符,字节)
一段连续的内存空间
容器序列:比较灵活,存放的是他们所包含的任何类型的对象的引用
可变:list, bytearray, array.array, collections.deque, memoryview
不可变:tuple, str, bytes
容器序列:list, tuple, collections.deque
扁平序列:str, bytes, bytearray, memoryview, array.array
linux
进程间通信:信号signal, 管道pipe, 共享内存share menory, 先入先出队列FIFO, 消息队列message queue, 嵌套字socket,
本文介绍了LeetCode的滑动窗口算法解决字符串问题,详细讲解了如何找到无重复字符的最长子串。接着探讨了Python中的map函数、生成器表达式以及ord()函数的使用。还深入讨论了Python的列表排序、数组操作以及collections.deque的特性。最后,总结了Python序列的分类,包括可变与不可变序列以及扁平序列和容器序列的区别。
1233

被折叠的 条评论
为什么被折叠?



