- 博客(33)
- 收藏
- 关注
原创 快排算法小结
private static int partition(int[] arr, int startIndex, int endIndex) { int left = startIndex; int right = endIndex; int pivot = arr[startIndex];//取第一个元素为基准值 while (true) { //从左往右扫描 while (arr[left] .
2021-07-21 21:56:48 138
原创 岛屿数量问题
岛屿数量我们可以将二维网格看成一个无向图,竖直或水平相邻的 11 之间有边相连。为了求出岛屿的数量,我们可以扫描整个二维网格。如果一个位置为 1,则以其为起始节点开始进行深度优先搜索。在深度优先搜索的过程中,每个搜索到的 1 都会被重新标记为 0。最终岛屿的数量就是我们进行深度优先搜索的次数。深度优先搜索算法遍历整个二维数组,判断是否为‘1’,如果是则遍历 记住 dfs(grid,i,j)private void dfs我总是出错 写成public终止条件:i和j是否越界,且grid[i][
2021-07-14 13:58:13 203
原创 最长上升子序列
动态规划法一:动态规划思路与算法定义 dp[i] 为考虑前 i个元素,以第 i个数字结尾的最长上升子序列的长度,注意nums[i] 必须被选取。初始化为dp[i]=1;即每个元素都为一个递增的起始点,长度为1;如果不初始化数量则会少1,出现错误。状态方程 dp[i]=max(dp[j]+1) 即i的子串长度为前i-1个子串最大长度加一。class Solution { public int lengthOfLIS(int[] nums) { int n=nums.le
2021-07-14 13:05:02 147
原创 层序遍历迭代法
思想:BFS遍历方法用队列思想,存储每一层结点,第一层入队列,第二层出队列。Queue a=new ArrayDeque<>();判断root是否为空,不为空则入队列。判断队列是否为空,不为空则执行循环。定义每一层的大小n,引入一个list对象 level出队元素存到level中。之后分别将左子树和右子树入队列。class Solution { public List<List<Integer>> levelOrder(TreeNode root)
2021-07-13 15:49:11 233
原创 最长回文子串的长度
如果dp[left+1][right-1]为true,我们判断s.charAt(left)和s.charAt(right)是否相等,如果相等,那么dp[left][right]肯定也是回文子串,否则dp[left][right]一定不是回文子串。所以我们可以找出递推公式dp[left][right]=s.charAt(left)==s.charAt(right)&&dp[left+1][right-1]有了递推公式,还要确定边界条件:如果s.charAt(left)!=s.charA
2021-07-06 21:23:17 134
原创 删除链表第N个节点
通过定义指针,前后指针,前指针遍历到第n个结点,前后指针一起动。pre指针定义为头结点的前一个指针,防止头结点为空。class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode pre=new ListNode(0); pre.next=head; ListNode start=pre,end=pre; while(n!=0){ sta
2021-06-22 21:21:19 483
原创 剑指offer12 矩阵中的路径
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。思路:DFS加剪枝法:回溯访问数组内任意一个元素,以其为起点,然后分别遍历上下左右字符是否与下一个字符相对。遍历过的字符用‘、0‘。如果不符合条件则将其回溯回原值’’class Solution { p
2021-06-18 17:33:40 77
原创 剑指offer 05
删除空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”思路:将字符串变成三倍长的字符数组,之后对数组进行遍历,如果字符串遇到空格,则替换成%20,如果不是空格则复制过去。记住最后有个字符数组转成字符串的操作。由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。获得 s 的长度
2021-06-07 22:10:38 73
原创 2021-06-07 三次握手 四次挥手
解释为啥是三次握手才能建立连接:一些解释:ISN:初始化序列号ACK:TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.SYN:请求建立连接; 我们把携带SYN标识的称为同步报文段第一次握手:客户端给服务器发送一个SYN。客户端发送网络包,服务端收到了。服务器得出结论:客户端的发送能力,服务端
2021-06-07 16:30:42 110
原创 数据库索引:主键索引
1、主键索引和非主键索引有什么区别?例如对于下面这个表(其实就是上面的表中增加了一个k字段),且ID是主键。其中R代表一整行的值。从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID
2021-06-02 10:47:36 4340
原创 Leedcode 题目最大子序和
动态规划对数组遍历。ans设为最大值,sum设为和。Math,max保存其最大值。这道题用动态规划的思路并不难解决,比较难的是后文提出的用分治法求解,但由于其不是最优解法,所以先不列出来动态规划的是首先对数组进行遍历,当前最大连续子序列和为 sum,结果为 ans如果 sum > 0,则说明 sum 对结果有增益效果,则 sum 保留并加上当前遍历数字如果 sum <= 0,则说明 sum 对结果无增益效果,需要舍弃,则 sum 直接更新为当前遍历数字每次比较 sum 和 ans的大小
2021-06-01 20:55:29 214
原创 旋转数组leedcode
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?第一个办法:创建一个新数组,然后再将原有数组copy。class Solution{public void romote(int [ ] arr , int k){int n=arr.length;int [ ] a=new int[n];for(int i=0;i<n;i++
2021-05-28 11:03:14 88
原创 剑指offer10.
剑指 Offer 10- I. 斐波那契数列‘’写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。思路:用动态规划求解。初始状态 dp[
2021-05-17 15:43:52 82
翻译 迭代器和生成器的区别
从数据集中一次按需获取一个数据项,这就是迭代器,迭代器强调是从数据集一次获取一个数据项,而生成器指“凭空”生成元素,然后也是可以一个一个获取;生成器中包含了迭代器的抽象(或者说接口、结构、方法),所以,所有的生成器都是迭代器。很多人视为同一概念简单来说:生成器是创建迭代器的快捷工具。生成器特点:利用yield返回数据,自动创建__iter__()和__next__()方法,写法更为紧凑和清晰。专业的理解(装B的表达):生成器是创建迭代器代码的抽象...
2021-05-13 11:43:52 400
原创 剑指offer24 反转链表
剑指 Offer 24. 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法1:迭代:定义一个prev curr next 结点在遍历链表时,将当前节点的 \textit{next}next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点
2021-05-13 11:16:12 85
原创 剑指offer03
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3class Solution {public int findRepeatNumber(int[] nums) {Set a = new HashSet();int repeat=-1;for(int num
2021-05-12 20:09:18 78
原创 2021-05-12 JAVA基础知识
JVM主要的三块内存:栈内存,堆内存,方法区。方法区放代码片段 classloader将字节码文件装载到JVM中。栈:在方法被调用时,方法需要的内存空间在栈中分配。栈存储局部变量。堆:实例变量,在类中定义的,开辟在堆内存。存储对象以及对象的实例变量。访问实例变量 引用.实例变量名。System.out.println(s1.no)保存对象内存地址的变量叫引用。对象和引用区别。引用是 :但凡是变量,该变量保存了内存地址,指向堆内存当中的对象。对象是new创建的,在堆内存中存储。抽象..
2021-05-12 18:51:32 90
原创 JAVA日常编程技巧
supersuper什么时候不可以省略:父类中有,子类中也有,想在子中继承父的特征 。super() super.super不是引用,不保存内存地址,super不指向任何对象。不能单独输出。**super.属性名 调用父类的属性super.方法名(实参)调用父类的方法super(实参)调用父类构造方法this和super不能使用在静态方法中。main方法是静态的。**只能用在实例方法中。构造方法 : 用来创建对象 ,是一个比较特殊的方法。完成对象创建和实例变量初始化。l类中没有提供任
2021-05-12 16:11:15 98
原创 Python函数语法规则
Python 2.X中,如果想让print语句在一行输入,可以加逗号,例如print i, 在python3.x中,不能直接加逗号 应该print(i,end=' ')分隔符为一个空格。索引 可以为负数 [-1]表示输出最后一个元素 -n, - (n-1),-n-2,-n-3.......-2,-1小编程 :利用for循环实现1到100的迭代相乘fori in range(100):for j in range(1,i+1): print(str(i)+'*'+st...
2021-05-10 21:54:58 155
原创 剑指offer刷题 字符串转换为数字
import java.util.Scanner;class Solution{public static int strToInt(String str) { int res = 0, bndry = Integer.MAX_VALUE / 10; int i = 0, sign = 1, length = str.length(); if(length == 0) return 0; while(str.charAt(i) == ...
2021-05-10 18:12:34 95
原创 为什么要使用contiguous
Contiguouscontiguous:view只能用在contiguous的variable上。如果在view之前用了transpose, permute等,需要用contiguous()来返回一个contiguous copy。一种可能的解释是:有些tensor并不是占用一整块内存,而是由不同的数据块组成,而tensor的view()操作依赖于内存是整块的,这时只需要执行contiguous()这个函数,把tensor变成在内存中连续分布的形式。判断是否contiguous用torch.Ten
2021-03-31 10:45:38 200
原创 C++学习路线1 const用法
const说明的类型是常类型,而且定义后不能被更改。const常量与#define宏定义常量的区别:~~const常量具有类型,编译器可以进行安全检查;#define宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查可以节省空间,避免不必要的内存分配const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数。 const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。1.对于指向常量的指针,不能
2020-11-23 22:05:41 74
原创 opencv读取图像的函数
显示一幅图:主要是运用功能:imread namedWindow imshowimread:从字面意思我们就可以看懂,用来读取图片的;namedWindow:显然,我们也可以看到这是用来命名窗口名称的;imshow:这个自然就是来显示窗口的,窗口内的当然就是要显示的图片了。代码来自OpenCV Tutorials 这个文件很好用的,推荐~代码仅供参考:#include<cv.h>//cv.h OpenCV的主要功能头文件,务必要;#include<highgui.h&...
2020-07-30 10:38:26 1254
原创 liunx指令大全
Linux下的压缩解压缩命令详解及实例实例:压缩服务器上当前目录的内容为xxx.zip文件zip -r xxx.zip ./*解压zip文件到当前目录unzip filename.zip============================另:有些服务器没有安装zip包执行不了zip命令,但基本上都可以用tar命令的,实例如下:tar-zcvf/home/zdzlibs.tar.gz/home/zdz/java/zdzlibs/===...
2020-07-25 14:46:00 143
转载 opencv学习日记1
OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘记释放内存,就会造成内存泄漏。从OpenCV2开始,开始使用Mat类存储图像,其新的C++接口,cv::Mat代替了原来c风格的CvMat和IplImage。目前,2.0版本对c的接口也是支持的。 相对于c的接口,c++的cv::Mat统一了矩阵和图像这两个概念。事实上,矩阵和图像其实是一样的。由于cv::Mat是c++的类,所以也具备了相关的一些特征。例如,内存的释放。在C++中,一个对象超出其使用范围后,...
2020-07-24 15:48:06 140
原创 研究生怎么更好的读文献
第一阶段:判断这篇论文值不值得读按【读标题和关键词→读摘要→读结论】的顺序掌握论文的大概内容第二阶段 :读论文1)读图表和数据→读引言2)深挖细节:读结果和讨论→读实验部分1.读综述和读原创科研论文相结合刚接触一个课题,可以先看单篇的实验论文,比如别人的实验论文或者自己课题组师生的实验论文,也可以看综述。当然,也可以反过来,先看综述,再看实验论文。也可以穿插起来,先看综述再看实验论文,再看综述;也可以先看实验论文,再看综述,再看实验论文。原创的文献和综述结合起来看,就能够既看到.
2020-07-23 19:40:43 410
原创 光流场
1.什么是光流光流(optical flow)是空间运动物体在观察成像平面上的像素运动的瞬时速度。光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。通常将二维图像平面特定坐标点上的灰度瞬时变化率定义为光流矢量。一言以概之:所谓光流就是瞬时速率,在时间间隔很小(比如视频的连续前后两帧之间)时,也等同于目标点的位移2.光流的物理意义一般而言,光流是由于场景中前景目标本身的移动、相机的运动,
2020-07-22 11:58:05 2505
转载 图像配准
图像配准的基本框架包括以下四个方面:特征空间、搜索空间、搜索策略和相似性度量。1.特征空间特征空间是指从参考图像和待配准图像中提取的可用于配准的特征。在基于灰度的图像配准的方法中,特征空间为图像的灰度值;而在基于特征的图像配准方法中,特征空间可以是点、边缘、曲线、不变矩等。特征空间的选取对图像配准有着重要的意义,因为特征空间不仅直接关系到图像中的哪些特征对配准算法敏感和哪些特征被匹配,而且大体上决定了配准算法的运行速度和鲁棒性等性能。理想的特征空间应满足以下...
2020-07-21 20:13:37 2408
转载 opencv获取像素值
1. 通过指针访问像素值 IplImage *Temp=*iterIplOri; uchar *dataaa=(uchar*)Temp->imageData; int step=Temp->widthStep/sizeof(uchar); int channals=Temp->nChannels; int r=0,g=0,b=0; for (int jj=Temp->heig...
2020-07-21 13:38:33 1523
原创 科研小白如何下载SCI论文
sci-hub:在我们获取文献与学术论文的道路上提供了极好的便利,可以从中得到免费的文献下载,但也因为这样遭到各大出版社:ai思为尔,施普林格,wiley等出版社的打击与封杀,使得Sci-Hub在域名上不得不频繁更换,所以在这里为大家提供解决问题的办法和最新网址的更新。1:https://gfsoso.99lb.net/sci-hub.html2:https://sci-hub.shop/3:https://sci-hub.ren4:https://sci-hub.tw/5:https:
2020-07-20 15:40:22 701
转载 关于matlab中调用opencv的文档
首先确定你安装了VisualStdio我这边安装的是VS2015,以VS2015为例,下载opencv-vs2015版本使用opencv3.4.1下载地址:https://github.com/opencv/opencv/releases/download/3.4.1/opencv-3.4.1-vc14_vc15.exe官网有使用VS2015编译好的,这里的vc14就是VS2015然后下载对应版本的mexopencvhttps://github.com/kyamagu..
2020-07-20 13:59:03 247
原创 如何用matlab读取txt文件坐标
matlab读取文本文件函数。1、load——适合读取纯数据文本;2、importdata——只读取数据,自动省略数据格式前后的字符,超大文件不适合;3、textread、textscan——适合读取行列规整的文本,会存到元胞中,可通过headerlines省略读取字段名(字符行);4、csvread、dlmread——适合读取csv、xsl等文件格式文本;5、fprintf、fscanf——适合读取复杂的文本(中英文、数字串混杂出现);一、纯数据文件(没有字母和中文,纯数字)Z = lo
2020-07-19 10:50:27 3099
原创 C++中vector的at函数使用方法
at函数和[]函数使用方法是一样的. 都是为了访问对应index中存储的数据,如果index大于vector的size. 两者都是抛出out_of_range的exception. 即抛出异常。通常来讲通过size()函数得到尺寸大小。
2020-07-17 22:36:49 8600
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人