- 博客(35)
- 资源 (4)
- 收藏
- 关注
原创 Github与Git学习笔记
Github与Git以前只知道在GitHub上下一些代码,然后在本地进行参考学习,由于最近写代码的过程中遇到了总是要频繁修改版本的情况,才开始决定了解学习一下可用于版本管理的GitHub与Git,以下为学习过程的一点笔记。为什么要用到Github?Github是一个面向软件的托管平台,什么时候会用到它?想要造轮子或者复现论文的时候,先去github上看看别人有没有做过以及别人是怎么做的,毕竟代码公开,在遵循开源协议的前提下,可以copy下来用的。几个小伙伴合作开发小软件小项目的时候,放到gith
2020-05-30 15:24:10 530 2
原创 剑指offer53 --- 矩形覆盖
剑指offer53 — 矩形覆盖题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:分析实质上是斐波那契数列的思想。第一个填满,即竖着放的时候,还剩下f(n-1)种放法。第一个横着放的时候,即两个横着放的时候,还剩下f(n-1)种放法。因此,有f(n)=f(n-1)+f(n-2),那么也就需要知道n=1以及n=2时候有几种放法,当n=1时,只有一种放法,n=2时,有两种方
2020-05-28 17:36:21 82
原创 剑指offer53 --- 矩形覆盖
剑指offer53 — 矩形覆盖题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:分析实质上是斐波那契数列的思想。第一个填满,即竖着放的时候,还剩下f(n-1)种放法。第一个横着放的时候,即两个横着放的时候,还剩下f(n-1)种放法。因此,有f(n)=f(n-1)+f(n-2),那么也就需要知道n=1以及n=2时候有几种放法,当n=1时,只有一种放法,n=2时,有两种方
2020-05-28 17:29:12 131
原创 剑指offer48 --- 连续子数组的最大和
剑指offer48 — 连续子数组的最大和题目HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)。分析先从头开始连
2020-05-28 16:53:35 153
原创 算法与数据结构--- 序列化以及反序列化二叉树(Python及C++实现)
序列化二叉树题目请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",然
2020-05-28 15:20:19 327
原创 剑指offer46 --- 二叉搜索树的第k个结点
剑指offer46 — 二叉搜索树的第k个结点题目给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。分析由于二叉搜索树的特殊性,中序遍历第k个结点即为从小到大的第k个数据。即写一个中序遍历的函数,调用并利用一个辅助数组进行遍历结果存储即可。代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.v
2020-05-27 02:36:23 136
原创 剑指offer44 --- 按之字形打印二叉树
剑指offer44 — 按之字形打印二叉树题目请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。分析利用两个栈来实现。当栈1和栈2都是空的时候就退出循环。代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None#
2020-05-23 00:07:20 151
原创 剑指offer43 --- 对称的二叉树
剑指offer43 — 对称的二叉树题目请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。分析用递归来判断是否为对称的二叉树,左的左是不是等于右的右,左的右是不是等于右的左,答案都是yes的时候,就是一颗对称的二叉树。代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.
2020-05-22 16:02:58 122
原创 剑指offer41 --- 二叉树的下一个结点
剑指offer41 — 二叉树的下一个结点题目给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析中序遍历即为左中右的顺序。将结点分为两种情况,有右子树的情况以及没有右子树的情况。寻找右子树,如果存在就一直找到右子树的左子树,就是输出的下一个结点没有右子树,就寻找他的父节点,一直找到它是父节点的左子树的时候,打印该左子树结点。代码# -*- coding:utf-8 -*-# class Tree
2020-05-22 15:39:56 176
原创 剑指offer32 --- 树的子结构(Python)
剑指offer32 — 树的子结构(Python)题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析先判断root的情况(判断root的情况时也是先判断root,再判断左右子树是否一致(递归)), 再判断左右子树(递归)。具体见代码。解# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.
2020-05-14 21:07:48 157
原创 剑指offer31 --- 重建二叉树
剑指offer31 — 重建二叉树题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序描述遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析手动重建流程图:算法步骤图:代码# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val =
2020-05-14 20:20:07 116
原创 图像的SVD分解
图中的内容大概包括:1.假设A为一个mn的矩阵,证明ATAA^TAATA的对称性和正定性,进而证明ATAA^TAATA为对称正定矩阵,才可保证对角阵D的λi\lambda_iλi均为正数,才可以开根号。2. SVD分解在神经网络中的应用,由200100次变为(10100 + 10200)次,在实际工作中,性能影响不大(之后可继续finetune),但是参数量大大减少,有助于网络部署。3. 在图像压缩中,最少可以将参数由m*n个减少到(m+n+1)个参数。...
2020-05-14 18:58:32 447
原创 MATLAB --- 利用geotiffwrite将浮点型的高程数据写成tif文件
MATLAB — 利用geotiffwrite将浮点型的高程数据写成tif文件。。。只是自己用一下以下的两行代码,发现能用后没有深究,或许之后会深究8。。。只是想要保存个tif图而已,不在乎坐标框架之类的时候:R=[0,-1;1,0;0,6000];geotiffwrite('result.tif', result, R, 'CoordRefSysCode', 21417);test: 某个坐标框架geotiffwrite(输出名称,输入数据,坐标框架)地理坐标时:R = ge
2020-05-14 14:49:21 6899
原创 二叉树的深度遍历
二叉树的深度遍历递归以及非递归的方式对二叉树进行深度遍历。非递归的方法常考。class TreeNode(object): def __init__(self,x): self.val = x self.left = None self.right = Nonedef preOrderRecursive(root): if root == None: return None print(root.val)
2020-05-12 18:04:17 140
原创 剑指offer29 --- 数组中只出现一次的数字
剑指offer29 — 数组中只出现一次的数字题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。分析解# -*- coding:utf-8 -*-class Solution: # 返回[a,b] 其中ab是出现一次的两个数字 def FindNumsAppearOnce(self, array): # write code here if len(array) <2:
2020-05-12 15:00:33 117
原创 算法与数据结构:丑数
剑指offer28 — 丑数题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析新建一个list,用来存储丑数。利用三个指针来不重复的,有序的构建丑数列表。解# -*- coding:utf-8 -*-class Solution: def GetUglyNumber_Solution(self, index): # write c
2020-05-12 13:34:44 178
原创 剑指offer26 --- 数组中出现次数超过一半的数字
剑指offer26 — 数组中出现次数超过一半的数字题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析 & 解dict方法:# -*- coding:utf-8 -*-class Solution: def MoreThanHalfNum_Solution(self, numbers): # w
2020-05-11 21:19:54 115
原创 剑指offer25 --- 不用加减乘除做加法
剑指offer25 — 不用加减乘除做加法题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析基础知识异或运算(^)如果对应位值不同(1,0或者 0,1),做^操作的运算结果为1,否则为0,也就相当于在不考虑进位的情况下做加法。与运算(&)只有两个都是1的时候才是1,而在二进制中需要进位也是只有两个都为1的情况,那么可以通过做&运算来找到需要进位的位置,并且左移来得到进位后的结果。按位取反 ~~x = -(x+1)
2020-05-11 20:30:28 144
原创 剑指offer24 --- 二进制中1的个数
剑指offer24 — 二进制中1的个数题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析 & 解补码: 正数不变,负数是它的正数的反码+1。解法1 :转换为字符串# -*- coding:utf-8 -*-class Solution: def NumberOf1(self, n): # write code here n= 0xFFFFFFFF & n count = 0 for
2020-05-09 22:40:07 161
原创 剑指offer24 --- 链表中环的入口结点
剑指offer24 — 链表中环的入口结点题目给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。分析什么是环?判断是否有环的想法1:空间换时间走一个加一个到set里面,有重复就说明是环。快慢指针:先判断是否有环(判断是否有环的想法2): 快指针走到none,则没环。 快指针和慢指针相遇,则有环。快走2慢走1时,快慢必相遇,相遇时经推导有:开头至环入口的距离s = 相遇点至环入口距离m + (n-1)*(相遇点至环入口距离m+环入口至相
2020-05-09 21:23:58 180
原创 算法与数据结构 --- 约瑟夫环问题及其变种
剑指offer23 — 孩子们的游戏题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦
2020-05-08 21:19:06 436
原创 剑指offer22 --- 两个链表的第一个公共结点
剑指offer22 — 两个链表的第一个公共结点题目输入两个链表,找出他们的第一个公共结点。分析绿框内为待求的公共结点。没有公共的返回None即可。两个链表的头都往后走,短的先到None停住,然后计算二者之间差的步数。之后让长的先走k步,之后长短一起走,相等时返回短的即可。解# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.ne
2020-05-08 20:17:18 157
原创 剑指offer21 --- 复杂链表的复制
复杂链表的复制题目输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)分析解法1:deepcopy可以但是copy不行.import copydef Clone(self,pHead) ret = copy.deepcopy(pHead) return ret解法2:用链表实现。每一次都要
2020-05-08 19:27:19 167
原创 剑指offer18 --- 反转链表
剑指offer18 — 反转链表题目输入一个链表,反转链表后,输出新链表的表头。分析将现有的头换成尾,尾部的next为空从第二个node开始,循环将next指向前一个需要有一个指针一直指向还没有反转的链表的头部题目# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# sel...
2020-05-07 13:24:31 126
原创 剑指offer17 --- 链表中倒数第k个结点
剑指offer17 — 链表中倒数第k个结点题目输入一个链表,输出该链表中的倒数第k个结点分析注意考虑边界条件k比链表长度小定义两个变量,变量之间间隔k,直到一个变量为Nonek比链表长度大直接return None解class Solution: def FindKthToTail(self, head, k): firstPoint=...
2020-05-07 12:31:27 141
原创 剑指offer15,16 --- 链表概念&从尾到头打印链表
剑指offer15,16 — 链表概念&从尾到头打印链表链表概念链表长度可变。单链表循环链表:双链表:双链表可以很方便的找上一个结点的数据题目输入一个链表,按链表值从尾到头的顺序返回一个ArrayList.分析链表每一个结点的结构:class ListNode: def __init__(self,x): self.val...
2020-05-07 11:52:12 122
原创 剑指offer14 --- 栈的压入弹出序列
剑指offer14 — 栈的压入弹出序列题目输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否可能成为该栈的弹出序列。假设压入栈的所有数字均不相等,例如序列1,2,3,4,5是某栈的压入序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该栈序列的弹出序列。分析新建一个列表,先逐个压入pushV中的元素,并逐个判断下一个是压入还是弹出。...
2020-05-06 20:40:26 156
原创 剑指offer13 --- 包含min函数的栈
剑指offer13 — 包含min函数的栈题目定义栈的数据结构,请再该类型中实现一个能够得到栈中所含最小元素的min函数,且满足时间复杂度为O(1)分析用时间换空间,或者用空间换时间。为实现时间复杂度O(1),考虑用空间换时间,在该题中即新建一个minValue列表,stack中每pop进一个数值则和minValue[-1]进行一次比较即可知道stack中的最小值,即实现时间复杂度为O(1...
2020-05-06 19:50:44 88
原创 剑指offer11 --- 调整数组顺序使奇数位于偶数前面
剑指offer11 — 调整数组顺序使奇数位于偶数前面题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数之间,偶数和偶数之间的相对位置不变。解class Solution: # 时间复杂度O(n),空间复杂度O(n)(新增加了n个数) def reOrderArray(self,arr...
2020-05-06 19:11:46 102
原创 剑指offer09 --- 旋转数组中的最小数字
剑指offer09 — 旋转数组中的最小数字题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。思路可以直接循环遍历找最小值,但是复杂度为o(n),可利用题干中数组的递增信息,降低时间复杂度。首先引入二分查找法:d...
2020-05-06 16:07:05 99
原创 剑指offer --- 用两个栈实现队列
剑指offer08 — 用两个栈实现队列题目用两个栈来实现一个队列,完成队列的push和pop操作,队列中的元素为int类型思路栈是先进后出,后进先出;队列是先进先出;即如何利用两个栈实现先进先出的效果,可用一个栈来接收数据,接收完数据导到第二个栈去输出即可。解pythonclass Solution: def __init__(self): # 定义两个栈...
2020-05-06 15:02:26 112
原创 剑指offer --- 替换空格
替换空格题目请实现一个函数,将一个字符串中的每个空格替换成"%20"。例如,当字符串为We Are Happy时,经过替换后的字符串为We%20Are%20Happy思路如果用python的话,直接return s.replace(' ','%20'),假设没有replace这个函数,自己实现:空格是一位,但是%20是三位,如何解决?这个即为考点,不能每更改一次,后面就挪一次,因此不...
2020-05-06 14:02:53 147
原创 二维数组中的查找
二维数组中的查找题干在一个二维数组中,每一行从左到右数值递增,每一列从上到下数值递增,请完成一个函数,输入一个这样的二维数组和一个整数,判断数组中是否含有该整数思路充分利用题干中二维数组给定的条件,即递增,进而降低时间复杂度。将target和行[i]的最后一个数进行比较,如果target比较小,那么应该在该行的左边进行查找,即j-=1如果target值比较大,那么应该先和下一行的最后一...
2020-05-06 13:07:52 117
原创 Python随机数生成
Python随机数生成语法:import random #必须导入random模块,才可以调用类似于uniform的函数利用random模块生成满足几种需求的随机数,如下面几个例子:例子如果希望随机数为整数:方法1:可对其进行类型转换random.uniform(x,y) #用来随机生成一个[x,y]范围内的实数int(random.uniform(x,y))方法2:使...
2020-05-05 21:29:19 310
经纬度转米的小函数,半径为月球
2019-11-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人