周报----3.3

本文介绍了LeetCode的滑动窗口算法解决字符串问题,详细讲解了如何找到无重复字符的最长子串。接着探讨了Python中的map函数、生成器表达式以及ord()函数的使用。还深入讨论了Python的列表排序、数组操作以及collections.deque的特性。最后,总结了Python序列的分类,包括可变与不可变序列以及扁平序列和容器序列的区别。

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,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值