自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 142.环形链表2

思路:用两个指针 first,secondfirst,second 分别从起点开始走,firstfirst 每次走一步,secondsecond 每次走两步。如果过程中 secondsecond 走到null,则说明不存在环。否则当 firstfirst 和 secondsecond 相遇后,让 firstfirst 返回起点,secondsecond 待在原地不动,然后两个指针每次分别走一步...

2020-05-06 16:42:36 198

原创 LeetCode 160. 相交链表 C++

算法步骤:用两个指针分别从两个链表头部开始扫描,每次分别走一步;如果指针走到null,则从另一个链表头部开始走;当两个指针相同时,如果指针不是null,则指针位置就是相遇点;如果指针是 null,则两个链表不相交;class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode ...

2020-05-06 16:00:36 253

原创 #define和const的区别

const与#define的区别1. 编译器处理方式不同define宏是在预处理阶段展开。const常量是编译运行阶段使用。2. 类型和安全检查不同define宏没有数据类型,不做任何类型检查,define只是简单的字符串替换。const常量有具体的数据类型,在编译阶段会执行类型检查。3. 存储方式不同define宏仅仅是展开,有多少地方使用,就展开多少次,存在于程序的代码段;c...

2020-05-03 17:14:36 259

原创 红黑树的插入过程(手动画图)

手动画的红黑树的插入过程

2020-04-29 15:53:12 364

原创 C++四种类型转换总结

C++四种类型转换总结目的:C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么,程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。细化转换类型提供安全性检测在代码中更加醒目隐式转换:类型转换:如果两种类型可以互相转换,那么他们就是关联的。(c++primer P141)隐式转换:int ival = 3.541 + 3;算术类型之间的隐式转换被设计得尽...

2020-04-27 14:52:05 305

原创 LeetCode 173.二叉搜索树迭代器

注意:next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度详细思路见注释/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * ...

2020-04-22 21:37:07 103

原创 LeetCode 105.前序遍历和中序遍历构造二叉树 C++

前序:中左右中序:左中右使用unordermap,可以提高效率具体解释见注释/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x),...

2020-04-20 21:38:58 241

原创 LeetCode 102.二叉树的层次遍历 C++

需要使用队列每出队一个元素,要入队该节点的左右孩子具体思路见注释/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(N...

2020-04-20 19:33:20 145

原创 LeetCode 70. 爬楼梯 C++

class Solution {public: // 动态规划解法--递归 vector<int> dp;// 用来记录已经计算过的结果,避免重复计算 int climbStairs(int n) { // 当dp为空时,申请空间(仅需要做一次该操作) if (dp.empty()) dp.resize(n+1); ...

2020-04-19 15:29:38 154

原创 LeetCode 297. 二叉树的序列化与反序列化 C++

详细思路在注释里1. 通过序列化,可以只使用先序遍历就可以唯一确定一颗二叉树。2. 序列化时:空节点用"#,"表示,非空节点用其节点的val值加逗号表示。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *r...

2020-04-18 21:44:52 236

原创 LeetCode 98. 验证二叉搜索树 C++

LeetCode 98. 验证二叉搜索树 C++思路:自顶向下遍历:每一个节点有一个对应的区间class Solution {public: bool isValidBST(TreeNode* root) { return dfs(root, INT_MIN, INT_MAX); } bool dfs(TreeNode* root, long lo...

2020-04-17 22:23:49 222

原创 LeetCode 94. 二叉树的中序遍历 C++

LeetCode 94. 二叉树的中序遍历 C++方法:1.迭代2.递归详细思路见注释class Solution {public: // 思路: // 1. 将整棵树的最左边一条链压入栈中 // 2. 每次取出栈顶元素,如果它有右子树,则将右子树压入栈中 vector<int> inorderTraversal(TreeNode* root...

2020-04-17 22:20:49 166

原创 LeetCode101.对称二叉树 C++

LeetCode101.对称二叉树 C++实现方法:1.递归2.迭代详细思路在代码注释中class Solution {public: /* // 递归写法思路: // 1.两个根节点的值要相等 // 2.左边的左子树和右边的右子树对称 // 3.左边的右子树和右边的左子树对称 bool isSymmetric(TreeNode* roo...

2020-04-17 22:16:44 207

原创 LeetCode395. 至少有K个重复字符的最长子串 C++

/* * 分治递归 */class Solution {public: // 1.统计每个字符出现的次数 // 2.找到第一个出现次数小于k的字符,下标为i // 3.处理该字符左边的字符串 // 4.在下标i后面找到第一个出现次数大于k的字符 //(思想:最长的子串一定不包含出现次数小于k的字符) int longestSubstring(...

2020-04-11 18:11:01 304

原创 Epoll的深入理解

最近学习了select、poll和epoll的相关知识,这里结合一些博客,做了一下总结。I/O多路复用:I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。...

2020-04-11 17:17:06 334 1

原创 C++构造函数的初始化列表

构造函数初始化列表详细内容可以看《Effective C++》的条款4对非内置类型成员变量,推荐使用类构造函数的初始化列表,但有时必须用带有初始化列表的构造函数:没有默认构造函数的成员类对象const成员或引用类型的成员构造函数初始值列表只能说明用于初始化成员的值,而不限定初始化的具体执行顺序,成员的初始化顺序与它们在类定义中的出现顺序一致。构造函数的执行可以分成两个阶段,初始化阶段...

2020-03-30 22:56:37 247

原创 进程与线程的区别

进程与线程的区别1. 进程有自己的独立空间,线程没有2. 进程是资源分配的最小单位,线程是CPU调度的最小单位3. 进程切换上下文开销大,线程开销小4. 一个进程挂掉了不会影响其他进程,而线程挂掉了会影响其他线程5. 进程和线程通信方式不同注:上线文切换:就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。...

2020-03-29 12:20:31 191

原创 L1和L2正则化的理解

2020-03-13 12:11:33 142

原创 C++的const解析

const的作用:便于进行类型检查。const用于定义常量:const定义的常量编译器可以对其进行数据静态类型安全检查;保护被修饰的东西,防止意外的修改const修饰函数形式参数 void fun(A const& a); 可以提高效率 引用传递不需要产生临时变量提高了效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量...

2020-03-09 23:08:28 147

原创 共享内存

共享内存共享内存的特征共享内存的实现一共有以下几种:pipe: 简单。只能在有血缘关系的进程间通信。fifo: 在无血缘关系的进程间通信。 内部数据只能读一次。(环形队列实现)mmap: 在无血缘关系的进程间通信。 内部数据支持反复读取。信号: 开销小。 携带数据简单。本地 socket: 稳定性最好。 实现复杂。shared mem : 类似于 mmap。 效率最高IPC。这...

2020-03-05 09:53:47 738

原创 一级指针和二级指针

一级指针和二级指针一级指针通常用作函数的输入参数,因为一级指针作为函数参数,在调用的时候,实参和形参是不同的内存空间,只是,这个内存空间存放的指针指向的是同一块地址,所以形参在函数执行中可以访问实参指向的内存空间,但是形参的指向的改变并不能影响实参。总结一句话:一级指针做函数参数, 在函数内做形参做重新指向并 不会影响实参的指向。一级指针需要注意的问题:1、不要在函数中,改变形参的指向来...

2020-02-29 17:52:59 413

原创 C++实现智能指针

智能指针代码实现:用两个类来实现智能指针的功能,一个是引用计数类,另一个则是指针类。引用计数类:包含两个数据成员: 引用的次数 所指的对象的指针指针类:里面有一个指向引用计数类对象的指针#include<iostream>using namespace std;template<typename T>class Counter{private: /...

2020-02-29 17:51:36 235

原创 LeetCode169题-多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2本题难度为中等。要寻找一个数组中出现次数超过数组长度一半的元素,我首先想到的就是逐一遍历,计算每个数组中每个数字出现的次...

2020-02-17 22:21:19 510

原创 Leetcode79题:单词拆分(中等难度)

题目描述给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回...

2020-02-14 14:30:20 134

原创 Leetcode208题:实现一个前缀树(Trie)

题目描述实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.search(“app”); // 返回 falsetrie.startsWith(“ap...

2020-02-14 11:08:46 261

原创 Leetcode139题--单词拆分

Leetcode139题–单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为...

2020-02-13 13:48:49 126

原创 剑指offer 面试题9-用两个栈实现队列

用两个栈实现队列数据结构特点栈:先进后出队列:先进先出定义两个栈:stack1和stack2stack1:用来在队列尾部添加节点。stack2:用来在队列头部删除节点。观察下图:上图中最左边序号为1的两个栈:在stack1中依次压入a,b,c三个节点,此时stack2为空。上图中最左边序号为2的两个栈:此时若需要在队列头部删除节点,需要将stack1中的节点依次弹出并按照弹...

2019-09-26 11:10:54 130

原创 初识c++中的const

const概述const单词字面意思为常数,不变的。它是c/c++中的一个关键字,是一个限定符,它用来限定一个变量不允许改变,它将一个对象转换成一个常量。const int a = 10;A = 100; //编译错误,const是一个常量,不可修改C中的constc中的const理解为”一个不能改变的普通变量”,也就是认为const应该是一个只读变量,既然是变量那么就会给const...

2019-09-03 21:28:29 159

原创 c与c++中的三目运算符

c与c++中的三目运算符c中的三目运算符C语言三目运算表达式返回值为数据值,为右值,不能赋值。int a = 10;int b = 20;printf("ret:%d\n", a > b ? a : b);输出为:20C++语言中三目运算表达式返回值为变量本身(引用),为左值,可以赋值。int a = 10;int b = 20;cout << "ret...

2019-09-03 16:49:22 1818

原创 LeetCode 198题 打家劫舍

c++代码利用动态规划思想先计算出dp[0] dp[1] 即偷或不偷前两个房子的最大偷窃金额然后每次迭代选择:max(dp[i-1], dp[i-2] + nums[i]);//核心代码class Solution {public:int max(int a, int b){ return a>b ? a : b;}int rob(vector<int&g...

2019-08-10 15:53:18 203

原创 Numpy的学习

Numpy的学习:很多时候都会用到numpy,但是却没有系统的学过,所以对其中的一些概念并不熟悉,直到看见了一篇总结,受益匪浅。文章分为上下两个部分,讲得通俗易懂,深入浅出。链接如下:https://mp.weixin.qq.com/s?__biz=MzU4NjIxODMyOQ==&mid=2247485943&idx=1&sn=f97be1f03650d3a830...

2019-06-05 19:26:05 93

原创 tracker_benchmark的perfPlot函数解析

这个函数主要实在使用数据集跑完自己的算法之后,利用统计的结果进行画图的函数前面会先定义一些东西,比如:metricTypeSet = { ‘overlap’};valTypeSet = {‘OPE’};等等,这些参数后面都会用到。函数的主体从这里开始:for i=1:length(metricTypeSet)一般metricTypeSet当中有error,overlap两个属性,是精...

2019-04-27 16:34:31 1604

原创 leetcode 189题旋转数组

我使用python语言写的,主要有两种方法。1.先将整个数组反转,在分别反转前k个和后k个,思路很简单。2.第2种方法是利用python中对list的一些操作,将list分片后再重新组合两种方法的代码如下:注释中也谢了思路class Solution(object): def rotate_1(self, nums, k): """ :type...

2019-04-07 09:25:54 132

原创 leetcode121题

121题和122题类似,但121题是只能买卖一次股票代码如下:class Solution(object): def maxProfit(self, prices): “”" :type prices: List[int] :rtype: int “”" if (prices == None) or len(price...

2019-03-30 22:17:08 325

原创 leetcode26题

Leetcode第26题虽然是一道简单的题,但自己还是没有想出来怎么做。问题核心:原地删除数组中重复的元素(所给数组已排序)解决方法:时间复杂度和空间复杂度都要求很低 在数组当中设置两个指针i和j,运行的时候,一个指针移动较快,一个移动较慢。 i初始只想nums的第一个元素,j初始指向nums的第二个元素,然后开始遍历。 当nums[j] != nums[i]的时候,将nums[j]复...

2019-03-29 08:01:19 392

原创 卷积核的尺寸、通道数、个数还有1*1卷积的理解

#卷积核的尺寸,通道数还有1*1卷积的理解卷积核:就是对某个局部的加权求和,是对局部的感知。一开始学习的时候,最卷积核的尺寸,通道数,卷积核的个数的概念十分混淆。后来逐渐理解,在深度学习中,卷积核的个数,就是就是经过该卷积核之后的输出的通道数。对于输入的每个通道,输出的每个通道上的卷积核是不一样的。比如:输入是2828192,然后经过尺寸为33,通道数为128的卷积核,那么卷积核的参数...

2019-03-10 20:20:08 13764 1

原创

数据结构之堆不是完整的讲解堆,只是写一些自己在学习的过程中感觉需要注意的几个点(参考书籍《啊哈算法》)堆的概念堆是一种特殊的完全二叉树首先说下满二叉树和完全二叉树满二叉树:每个内部节点都有两个儿子结点;完全二叉树:除了最后一层,其余层的结点数都到达了最大值,最后一层从右向左连续缺若干结点;(也可以理解为:如果一个结点有右结点,那么一定也有左结点)最大堆:父结点都比子结点大。最小堆...

2019-03-10 19:59:18 185

原创 梯度下降浅析

我个人看来,梯度下降可以理解为我们生活中如何最快下山的问题。如何最快的下到山底,需要解决两个问题:1.每走一步时,应该朝哪个方向迈出步子。                                                                     2.每一步应该迈多大。 每次朝哪个方向迈出步子,即是要找到一个最陡峭的方向。如果我们每迈出一步都是朝着最陡峭...

2018-08-19 13:19:52 327

原创 matlab2016的下载与安装

第一步:软件下载链接:https://pan.baidu.com/s/18fgCc-lzEiKMw5BeIXQ1Xg(百度网盘,永久有效)下载好之后,文件夹中有如下三个文件:  对这两个压缩文件进行解压(解压到不同文件夹下,方便后面的操作)第二步:开始安装1.在bin/win64下找到set.exe文件,打开,安装提示逐步点击下一步,其中安装秘钥为:2.在R20...

2018-08-18 18:20:10 7481 1

空空如也

空空如也

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

TA关注的人

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