自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 07. 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。解法1:递归思路。在前序遍历中,根节点即为第一个数。确定根节点后,在中序遍历中找到根节点对应位置,根据中序遍历特点,根节点位置左侧属于左子树,右侧属于为右子树。这样就确定了左子树的节点个数。根据节点个数在前序遍历中划分出左子树区间。形成循环节/** * Definition for a binary tree node. * public class TreeNode { * .

2020-07-25 17:37:34 144

原创 09. 用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class CQueue {.

2020-07-23 12:08:58 153

原创 10- I. 斐波那契数列和10- II. 青蛙跳台阶问题

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble.

2020-07-23 11:32:03 156

原创 06. 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。主要是顺序问题,利用栈先入后出的特性/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public int[] reversePrint(L.

2020-07-23 11:15:26 100

原创 05. 替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。没啥好说的,唯一的技巧就是预先创造存储数组,避免使用String的+运算,提高时间效率。class Solution { public String replaceSpace(String s) { int n = s.length(); char[] ans = new char[n*3]; int size = 0; for(int i=0;i<n;i++).

2020-07-23 11:08:01 84

原创 04. 二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。主要问题在于怎么缩小搜索区间。如果从(0, 0)开始,会发现不管可行的两个方.

2020-07-23 10:41:32 84

原创 25. K 个一组翻转链表

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5来源:力扣(LeetCode)链接:https://leetcode-cn.com

2020-05-16 09:45:12 103

原创 560. 和为K的子数组

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。求的是sum(i, j)=k的个数。这个式子可以进行一些分解分解1:sum(i, j)=sum(i, j-1)+nums[j]=k 变成sum(i,j-1) = k-nums[j],检查这样的sum(i,j-1)是否存在分解2:sum(i, j) = sum(0, j)-sum(0, i-

2020-05-15 23:13:28 148

原创 ThreadLocal部分解析

ThreadLocal创造线程独有的变量。ThreadLocal val = new ThreadLocal();实际上,ThreadLocal val这个还是个实例变量,还是多个线程共享的。想要实现线程独享,开脑洞可以有两种方式:1、在对象上开辟一个hash空间,把线程和线程独享的变量组成key-value,放入对象上hash空间。2、在线程(Thread) 对象上开辟空间,把对应变量存到线程对象中去。...

2020-05-14 10:20:23 106

原创 03. 数组中重复的数字

Leetcode 找出数组中重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3方法一:计数的思路,出现重复就返回。空间O(N), 时间O(N)。class Sol...

2020-05-02 23:02:59 147

原创 LeetCode4. 寻找两个有序数组的中位数

二分法的hard题目。LeetCode4. 寻找两个有序数组的中位数给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。难就难在时间复杂度上。如果不考虑这点,用归并排序的merge思路解决,复杂度O(m+n).# 归并的me...

2020-04-08 20:22:23 136

原创 Python中字典的几个问题

为什么可变对象不可hash可hash对象有哪些为什么hash和eq必须等价dic[key]的背后逻辑和运行规律是啥missing, contain, get, setdefault,

2020-03-30 17:16:12 790

原创 实例属性和实例方法的存储

实例属性和实例方法的存储方式从两个问题出发:1、为什么super.func(), 可以得到同名的父类方法,但是缺super.val获得同名实例属性这种东西?2、父类调用子类属性这种奇怪的东西为什么是可行的?从obj = ClassA()开始,调用new返回一个实例,这相当于开辟了空间,接着init方法初始化各个变量,附属到obj中,如果init中调用了父类init,那么通常要让父类init...

2020-03-30 17:08:17 476

原创 Python的super部分解读

一直以为读懂了Fluent Python中关于super的部分,事实证明还是太天真了。书中关于pingpong的例子没有突出重点,导致一直没有意识到理解错误了。super并不一定指向父类class Base: def __init__(self): super(Base, self).__init__() print("this is A") ...

2020-03-30 16:42:21 199

原创 二分法的边界问题详细分析

二分法中最痛苦的问题:确定边界条件。下面从一个最简单的例子说起:LeetCode 704. 二分查找class Solution: def search(self, nums: List[int], target: int) -> int: left, right = 0, len(nums) # 确定左右边界 while left < r...

2020-03-29 23:09:00 3443 4

原创 二叉树的几种遍历方式

前序、中序、后序、层序前序二叉树的前序遍历# 递归版本class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: res = [] if not root: return res res.append(root.val) ...

2020-03-26 13:55:41 250

原创 python中的property特性

property特性解决什么问题: 属性的存取检查 (封装)Fluent Python中的经典例子就是商品价格设置,商品价格不能为负数,所以设置价格属性的时候必须进行检查。方法一、如果没有特性,可以怎么做禁止 ‘.’ 运算符直接访问属性。这个通过私有属性来完成。设置存取方法。这也是C++的做法。由于python中没有访问控制符,可以使用双下划线隐藏属性。class GoodItem...

2020-03-21 23:29:43 223

原创 C++和Python中的%

%C++Python支持的数值类型整数浮点计算方法a%b=a−a/ba\%b=a-a/ba%b=a−a/ba%b=a−a//ba\%b=a-a//ba%b=a−a//bC++中整数除法返回整数,小数部分舍去。Python中整除//的结果向负无穷舍入。因此两者的%符号计算结果存在差异。例如:# pythonprint((-5)%(2), (-5)%(-...

2020-02-29 16:20:34 278

原创 原码、补码

计算机的整型数可以分为有符号数和无符号数。有符号数使用最高位作为符号位。以一个字节(8bits)的存储为例。无符号为表示区间为[0, 255], 有符号数为[-128, 127]。计算机二进制表示中,整数常用补码表示。正整数时补码和原码是等价的。原码表示法使用最高位作为符号位,其余位按照正常的换算方式。例如+1,-1分别表示为0000 0001,1000 0001。两者只有符号为不同。原码表...

2020-02-29 15:53:49 595

原创 多项式展开后的项数

多项式展开的项数计算。假设f(x)=(x1+n2+...+xn)kf(x) = (x_1+n_2+...+x_n)^kf(x)=(x1​+n2​+...+xn​)k求不同的项数目,例如 x1kx_1^kx1k​,x2kx_2^kx2k​和x11x2k−1x_1^1x_2^{k-1}x11​x2k−1​是不同的项。用排列组合的知识,一共有两个步骤。选定变量分配每个变量的幂选定变量x...

2020-02-16 19:46:50 4062

原创 对序列进行+,*, +=,*=运算

python的序列类型支持 *,+,*=, +=*, + 的操作逻辑都是创建新变量然后重新赋值,所以变量id将会改变。这毫无疑问,尤其是对于不可变类型。需要注意的是,*运算对各个元素执行的是复制操作,某些时候可能导致错误x =[[]]*3 #导致三个元素指向同一列表x[0].append(1) # [[1], [1], [1]]如果存储的元素是不可变类型,这个问题几乎可以不用担心,因...

2019-12-04 16:36:31 270

原创 为什么区间个切片要忽略最后一个元素

这个问题在fluent python提到,同时引了计算机Edsger W. Dijkstra的解释。简要记录如下当我们想取出2,3,…12这个区间时,共有四种表达式可选:a) 2 ≤ i < 13b) 1 < i ≤ 12c) 2 ≤ i ≤ 12d) 1 < i < 13其中a)、b)表达式可以从两端相减区间长度,这时其中一个优点。但是并不是决定...

2019-12-04 15:58:38 658 1

原创 可迭代对象、迭代器及可迭代元素解包(元组解包)

# 平行赋值a, *b, c = [1, 2, 3, 4] # a =1, b=[2, 3] , c=4# a, *b, c = *[1, 2, 3, 4] #错误的用法,右侧不能使用*def f0(*a): print(a)f0(1, 2, 3)# (1, 2, 3)def f1(a, b, c): print(a, b, c)f1(*(1, 2, 3))# 1, 2...

2019-12-03 11:01:36 375

原创 两个有意思的bug(pytorch, numpy)

pytorch索引加一出错为了加速运算,写了一行对应索引加一的代码,大概长这个样子:#注意data是pytorch里的tensordata[index] += data[index]少量数据的测试中,上面的代码运行正常,结果也正确。当index长度大于data的长度时候,运行也正常,但是加和总数对不上。后来发现,在pytorch中上述的索引加一操作在一次调用中只会对单个索引执行一次...

2019-11-20 16:18:36 182

原创 Keras并行训练

Keras如果以Tensorflow作为后端,是自动支持GPU的。也就是说你只管定义模型,compile,fit。如果能检测到可用的GPU,就会自动跑在GPU上。数据并行如果要用多GPU训练,只需要用multi_gpu_model函数再包裹 一下。具体如下## 代码来自keras官方文档 网址 https://keras.io/getting-started/faq/#how-can-i-...

2019-07-29 20:31:24 1353

原创 Keras创建模型的两种方法

Keras作为高级API就要有高级API的样子,要让创建普通模型变得简单起来 (少写代码)1.Sequential模型最简单的模型创建方法是使用Sequential创建顺序模型,顾名思义,数据的传播是从前往后一条线传播的。用add方法往模型中加网络层或者初始化时从可迭代对象中创建也是可以的,层次顺序按照add的先后。然后compile, fit一个网络就搞定了。官方代码连接2.functio...

2019-07-29 20:05:54 1699

原创 Keras基本认识

Keras在希腊语中是尖角(horn)的意思,大概作者希望这个框架成为深度学习利器。Keras是神经网络的高级API。运行在诸如tensorflow,theano之类的框架之上,简而言之就是封装了一些常用的操作,让调用更加方便,少写代码(重点)。keras支持CPU,GPU运算。以tonsorflow作为后端时,自动支持GPU,不需要额外的代码。也支持多卡并行训练,包括模型并行和数据并行两种...

2019-07-29 19:31:11 334

原创 name_scope()和variable_scope(),Variable(),get_variable()

name_scope()命名空间对get_variable()创建的变量没有影响,不会附加到变量名头部。但是variable_scope()对Variable有影响,将会附加到头部。同样name_scope()也不会指向已经创建的变量空间,即使同名也会自动添加后缀,使其不同。variable_scope(name),会先寻找是否存在该空间,如果存在就指向该空间,否则创建该空间。Variab...

2019-07-23 20:14:48 78

原创 傅里叶级数

从线性代数的角度来看,线性空间中的任意对象都能通过选取一个基来进行坐标表示。举个简单的例子,先定义线性空间R3 ,再选择单位坐标基。现在就可以将R3 中的任意向量表示成这样:那么怎么求取这些系数呢,这时候选择单位坐标基的优越性就显示出来了。因为单位坐标基是一组标准正交基,所以你只要计算被表示向量与基向量的内积,就能得到相应的系数,想象下力的分解与合成。否则常规做法是求解线性方程组。现在就可以从...

2019-07-23 20:13:28 211

原创 python的logging基本知识

logging用于记录程序运行中一些有用信息,包括指示程序运行状态,程序运行出现的错误,警告等。日志是分等级的,从DEBUG,INFO,WARNING, ERROR,CRITICAL,共五个等级,其中事件等级依次上升。logging默认只有等级是WARNING或者高于WARNING的才在控制台显示输出。常见的处理事件的方法有输出到控制台和输出到文件。如果不指定输出的日志文件,高于阈值的日志就...

2019-07-23 20:12:56 175

原创 Argparse基础总结

Argparse是python标准库中的命令行解析模块。命令行中的调用形式,形如ls命令ls optionpython filename.py option其中参数分为两种,一种是位置参数,程序通过命令行中输入的顺序来确定如何操作。另一种是可选参数,–varname来指定,同时也可以同时支持短命名形式-v。位置参数是必须的,如果在命令行调用中没有给出相应个数的位置参数,程序就...

2019-07-22 16:40:48 164

原创 python的多态、协议及鸭子类型概念

多态: 可以对不同类型的对象执行相同的操作,该操作的结果将根据对象类型而异。最常见的例子之一是+运算符,数值型变量、list变量和string变量都支持 ‘+’ 加法操作,但是结果却不同,这就是一种多态。来看看自定义的类如何支持 '+'class A: def __init__(self,lst): self.var = lst def __a...

2019-06-23 09:54:19 234

原创 Fluent Python chapter2--列表推导和生成器表达式

列表推导和生成器表达式#例子1lst = [i for i in range(5)] #列表推导# lst2 = list(i for i in range(5)) #括号内是生成器表达式s = (str(i) for i in range(5)) #产生生成器print(lst)print(s)#结果输出[0, 1, 2, 3, 4]<generator o...

2019-06-22 17:30:29 209

原创 Fluent Python chapter1--Python 数据模型

1、python一致性python的优雅之处就在于他的一致性。一致性是指他的背后的设计思想遵循同一种风格,当你掌握这种风格之后,就可以用一种固定的方法操作他们。举个例子,你可以把自定义的类写得像是python内置的list类型,支持list的各种操作。这种一致性通过实现python的特殊方法实现,也称魔术方法,fluent python作者更愿意称之为特殊方法,因为这是有迹可循的,只是效果ma...

2019-06-22 16:32:20 171

原创 数据集划分办法基于sklearn

sklearn中的数据分割模块,model_selection在划分训练集和测试集时候的几点考虑:实现:使用随机函数产生等长的随机数列,将随机数列中按照划分比例,划分为训练和测试集合问题1:每次产生的训练集不一样固定随机数产生器的随机种子问题2:当打乱样本顺序时,每次划分的训练集也将不一样设置id,使用hash码划分的办法问题3:随机采样,可能造成训练集和测试集合中样本分布的不均匀(...

2019-06-22 14:41:22 243

原创 python中变量的存储与拷贝

python的所有变量都是引用类型,也就是说每个变量至少包括两个部分:存放变量引用的内存块和存放变量内容的内存块以字符串为例由于字符串是不可变类型,如果改变已经创建字符串的内容,将执行替换操作,将变量指向一块新的内存。s = 'abcd'print(s,':',id(s))s = 'ijmn'print(s,':',id(s))abcd : 1390779247728ijm...

2019-03-03 14:54:50 856

原创 理解python中的可变类型、不可变类型及如何改变函数中的参数

可以将python中常见数据类型按照可变与不可变大致分为两类可变类型不可变类型列表、字典、类数值型、字符串、元组理解可变与不可变  熟悉python的都知道,像字符串和元组创建之后是无法更改的,如果更改那么就只能替换掉,也就是说丢弃原来的存储空间,将变量名链接到新的空间中。而像list和dict是支持增删改的。以list和tuple增加元素的操作为例(用内置函数 ...

2019-02-21 00:24:01 827

原创 编程语言类型

编译过程、解释型语言与编译型语言编译的四个步骤语言类型编译的四个步骤1.预处理: 处理头文件与宏定义2.编译: 将源程序转换成汇编语言3.汇编: 将汇编语言翻译成机器码4.链接: 链接库文件等,形成可执行程序C语言为例预处理编译汇编链接源程序.c预处理后的程序.i汇编语言.s机器码.o可执行文件语言类型类型区别优缺点例子编译型将源代码编译生成机器码,由机...

2019-02-11 16:40:54 297

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除