/images/avatar.png

vllbc

pyplot

matplotlib.pyplot学习

绘图标记

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([1,3,4,5,8,9,6,1,3,4,5,2,4])

plt.plot(ypoints, marker = 'o') # "o"代表实心圆
plt.show()

maker可用的符号如下:

fmt参数

fmt = '[marker][line][color]'

例如 o:ro 表示实心圆标记,: 表示虚线,r 表示颜色为红色。

机器学习的一些概念

范数的定义

\[ {\lVert x \rVert}_p := \left(\sum_{i=1}^n{\lvert x_i\rvert}^p\right)^{\frac{1}{p}} \]

标准化与归一化

定义

归一化和标准化都是对数据做变换的方式,将原始的一列数据转换到某个范围,或者某种形态。 >归一化:将一列数据变化到某个固定区间(范围)中,通常,这个区间是[0, 1],广义的讲,可以是各种区间,比如映射到[0,1]一样可以继续映射到其他范围,图像中可能会映射到[0,255],其他情况可能映射到[-1,1];

验证二叉搜索树

验证二叉搜索树

https://leetcode-cn.com/problems/validate-binary-search-tree/

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isValidBST(self, root: TreeNode) -> bool:
        return self.search(root,-(232),232)
    def search(self,root,mins,maxs):
        if root == None:
            return True
        if root.val > mins and root.val < maxs:
            pass
        else:
            return False
        return all([self.search(root.left,mins,root.val),self.search(root.right,root.val,maxs)])

最后用了个all 也是简洁了代码

vim

范围+文本对象

范围

  • 内部:i ,意指 inner
  • 外部:a ,英文单词 a,一个的意思

文本对象

  • ( 或 ) :一对 ()
  • b :一对 ()
  • { 或 } :一对 {}
  • B :一对 {}
  • [ 或 ] :一对 []
  • < 或 > :一对 <>
  • t :tag (HTML 或 XML)标签
  • ' 或 ' :一对 ''
  • " 或 " :一对 ""
  • ` 或 ` :一对 ``
  • w :一个单词
  • s :一个句子;以 . ! ? 结尾即为一个句子
  • p :一个段落;以一个换行符间隔即为一个段落(一般用于对函数体操作)

比如i'代表'内部,iw代表光标所在单词,注意到,加上了范围i或者a,则原本的w含义也发生了变化,注意这是两个东西,原本的w为一个移动,而这里的w代表文本对象即单词。

无重叠区间

无重叠区间

https://leetcode-cn.com/problems/non-overlapping-intervals/

利用了贪心 移除的数目就是总数目减去条件成立的数目

class Solution:
    def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        if len(intervals) == 0:
            return 0
        res = 0
        mins = -float("inf")
        for i in sorted(intervals,key=lambda i:i[1]):
            if i[0] >= mins:
                res += 1
                mins = i[1]
        return len(intervals) - res

注意是根据end进行排序的,引用别人的解释@HONGYANG

对角线遍历

对角线遍历

题目:

https://leetcode-cn.com/problems/diagonal-traverse/

思路:

​ 每个对角线的两索引之和是一样的

代码:

class Solution:
    def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]:
        if not matrix: 
            return []
        hashs = collections.defaultdict(list)
        row, col = len(matrix), len(matrix[0])

        for i in range(row):
            for j in range(col):
                hashs[j + i].append(matrix[i][j])
        res = []
        flag = True
        for k, v in sorted(hashs.items()):
            if flag:
                res.extend(v[::-1])
            else:
                res.extend(v)
            flag = not flag
        return res

注意flag的作用