周报----3.2

1.coding笔记

        454题-四数相加ll:力扣  

        349题-两个数组的交集:力扣

2.读书笔记

1.1

题干

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:

0 <= i, j, k, l < n
nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0
 

思路:利用hashmap,把前两个数的和存再hashmap中并赋值为1,出现相同数时,使hashmap加一。求key=0-后两个数的和,当key存在于hashmap中时,把hashmap的值赋给count,返回hashmap

代码

class Solution:

    def fourSumCount(self, nums1: List[int], nums2: List[int], nums3: List[int], nums4: List[int]) -> int:

        hashmap = dict()

        for n1 in nums1:

            for n2 in nums2:

                if n1 + n2 in hashmap:

                    hashmap[n1 + n2] += 1

                else:

                    hashmap[n1 + n2] = 1

        count = 0

        for n3 in nums3:

            for n4 in nums4:

                key = - n3 - n4

                if key in hashmap:

                    count += hashmap[key]

        return count

1.2 

题干:

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

思路:

利用set()方法去重,用&取同时存在的字符,再有将结果用list()转化为列表来表示

代码:

class Solution: def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:

        return list(set(nums1) & set(nums2))

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

“B”类型:无符号数; memory.cast:能用不同的方式读写同一块内存数据,而且内容字节不会随意移动。

#二维数组

import numpy

a = numpy.arange(12)

a

----array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

type(a)

<class ‘numpy.ndarray’>

a.shape   #查看数组维度

----(12,)

a.shape = 3 , 4  #把数组变成二维

a

----array([ [0, 1, 2, 3],

[4, 5, 6, 7],

[8, 9, 10, 11]])

a[2]

----array([8, 9, 10, 11])

a[2, 1]

----9

a[:, 1] #打印第一列

----array[1, 5, 9]

a.transpose() #行和列交换,形成一个新的数组

----array([[0, 4, 8]

[1, 5, 9]

[2, 6, 10]

[3, 4, 11]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值