自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hanhan的博客

博观而约取,厚积而薄发

  • 博客(53)
  • 资源 (6)
  • 收藏
  • 关注

原创 机器学习笔记:PCA的简单理解以及应用建议

用notability做的笔记,比较随意,对于第五点的PCA错误使用需要特别强调。目录1、PCA与线性回归2、PCA主成分数量选择3、压缩重现4、PCA应用建议5、PCA的错误使用1、PCA与线性回归2、PCA主成分数量选择3、压缩重现4、PCA应用建议5、PCA的错误使用...

2020-10-31 19:47:56 439

原创 leetcode 538. 把二叉搜索树转换为累加树 思考分析

题目给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。递归思路二叉搜索树的中序遍历是一个单调递增的数组,我们要做的就是求出从后到前的累加值:[2,5,13]->[20,18,13]数组的从后向前累

2020-10-31 13:27:18 163

原创 【嵌入式系统】STM32配置FreeRTOS以及利用多线程完成流水灯、按键、蜂鸣器、数码管工作

1、利用STM32CubeMX配置FreeRTOS2、利用线程完成流水灯、按键、蜂鸣器工作3、关于FreeRTOS的注意事项注意点:1、每个任务函数中都要有延时delay2、osdelay使当前任务挂起,当延时结束,又唤醒当前任务,相当于释放了cpu。而HALdelay在延时中还是会占用cpu资源的。3、时间戳可以在不使用delay的情况下得到当前时间4、os函数都需要在任务函数中调用...

2020-10-30 18:01:15 6650 3

原创 【C++grammar】string类和array类

C++ 使用 string 类处理字符串string类中的函数(1) 构造(2) 追加(3) 赋值(4) 位置与清除(5) 长度与容量(6) 比较(7) 子 串(8) 搜索(9) 运算符C++11的string类1、创建 string 对象由一个字符串常量或字符串数组创建string对象string message{ "Aloha World!" };char charArray[] = {'H', '.

2020-10-30 16:20:58 1098

原创 二叉搜索树的插入、删除、修剪、构造操作(leetcode701、450、669、108)

目录1、leetcode 701. 二叉搜索树中的插入操作1、题目2、递归法3、迭代法1、leetcode 701. 二叉搜索树中的插入操作1、题目给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。输入数据 保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果 。2、递归法递归返回值以及参数返回值为空,因为我们进行的是插入操作,不需要知道插

2020-10-30 11:14:12 384

原创 leetcode 235. 二叉搜索树的最近公共祖先 思考分析

目录题目思考迭代法题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]思考对于普通二叉树,利用回溯从底向上搜索,遇到一个结点的左子树有p,右子树有q,那么当前结点就是最近公共祖先。对于有序

2020-10-28 10:44:21 168

原创 leetcode 236. 二叉树的最近公共祖先 思考分析

目录题目思考分析改进本文章代码思路来源于公众号【代码随想录】题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x的深度尽可能大(一个节点也可以是它自己的祖先)。”思考分析1、自下而上遍历对于此题有极大帮助,而后序遍历的特征便是优先处理叶子结点2、如何判断一个节点是结点q和结点p的公共祖先:如果找到一个结点,左子树出现结点p,右子树出现结点q

2020-10-27 22:22:39 262 1

原创 leetcode 501. 二叉搜索树中的众数 思考分析

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {private: void traversal(TreeNode* cur,u

2020-10-27 21:28:46 161

原创 LeetCode 530. 二叉搜索树的最小绝对差 思考分析

目录题目思路1:递归遍历得到result数组(单调递增),然后对数组进行前后差分,取最小值思路2:不用数组,进行优化思路3、回顾迭代法求解题目给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。思路1:递归遍历得到result数组(单调递增),然后对数组进行前后差分,取最小值/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *le

2020-10-26 20:31:49 184

原创 LeetCode 98. 验证二叉搜索树 思考分析

题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。1、利用BST性质:中序遍历结果递增由平衡二叉树的性质可知,若是用中序遍历方法,得到的结果会是递增的。初次外,如果root的结点为空或者只有1个结点的时候,我们认为它也是一棵二叉搜索树。以这样的思路写出的递归代码:/** * Definition for a binary tree

2020-10-26 19:38:02 164

原创 leetcode 700. 二叉搜索树中的搜索 思考分析

目录题目1、不考虑BST性质,直接递归遍历2、回顾BST性质3、利用BST性质进行遍历4、简单的迭代方法题目给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。1、不考虑BST性质,直接递归遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *

2020-10-24 21:53:52 213

原创 leetcode 617. 合并二叉树 思考分析

题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。思路1:递归遍历两棵树,构造一棵新的树1、递归参数以及返回值返回值:新树的结点参数:两棵旧树2、终止条件两棵旧树的对应的该结点都为NULL3、逻辑(这里直接贴代码和遇到的问题)首先将情况分为4类:如果t1 和t2 都是空结点,那么说明新树的这

2020-10-24 19:35:01 303

原创 leetcode 654. 构造最大二叉树 思考分析

题目给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。思路和之前的构造树一样:分成左右区间(子树)递归/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNod

2020-10-24 18:36:12 180

原创 【C++grammar】C++类数据成员的初始化

目录1、类成员的就地初始化example2、构造函数初始化3、默认构造函数:Default Constructor4、举例5、成员的初始化方法的优先级1、类成员的就地初始化exampleclass S { int m = 7; // ok, copy-initializes m int n(7); // 错误:不允许用小括号初始化 std::string s{'a', 'b', 'c'}; // ok, direct list-initializes s std::strin

2020-10-23 19:20:53 1009

原创 leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析

目录1、106题目2、参考思路:递归切割数组3、105题目4、同样思路的代码1、106题目2、参考思路:递归切割数组代码参考:公众号:代码随想录后序数组+中序数组以 后序数组(左右中)的最后一个元素作为切割点,先切中序数组,根据中序数组反过来再切割后序数组。一层一层切割下去,每次后序数组最后一个元素就是结点元素。先序数组+中序数组以 先序数组(中左右)的第一个元素作为切割点,先切中序数组,根据中序数组反过来再切割先序数组。一层一层切割下去,每次先序数组第一个元素就是结点元素。先序数组+后序

2020-10-23 15:38:39 209

原创 【C++ grammar】抽象、封装与this指针

目录1、Abstraction and Encapsulation(抽象与封装)1. Data Field Encapsulation (数据域封装)2. Accessor and Mutator (访问器与更改器)2.1. To read/write private data, we need get/set function (为读写私有数据,需要get/set函数)2.2. Signature of get function (General form) (get函数的一般原型)2.3. Signa

2020-10-22 22:48:10 310

原创 LeetCode 112. 路径总和 、113. 路径总和 II 思考分析

目录112. 路径总和题目递归解递归解,其他人的解法迭代解,其他人的解法113. 路径总和 II题目递归解递归解,参考别人的思路112. 路径总和题目给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。递归解1、函数参数:当前树的根结点、

2020-10-22 16:14:07 204

原创 LeetCode 513. 找树左下角的值 思考分析

题目给定一个二叉树,在树的最后一行找到最左边的值。递归解左下角要满足两个条件:1、深度最大的叶子结点2、最左结点:使用前序遍历,优先左边搜索。1、确定递归函数的参数和返回值参数:树的根结点,maxlen记录最大深度,maxleftval记录最大深度最左结点的数值。int maxlen = 0; //全局变量,记录最大深度int maxleftval; //全局变量 最大深度最左节点的数值void traversal(TreeNode* root,int leftlen);2、

2020-10-22 13:10:56 181

原创 LeetCode 404. 左叶子之和思考分析

题目计算给定二叉树的所有左叶子之和。如果是下面的树,只有一个左叶子结点4思考分析由此我们可以得到左叶子结点的定义:cur->left !=NULL && cur->left->left==NULL && cur->left->right==NULL递归遍历+累积操作/** * Definition for a binary tree node. * struct TreeNode { * int val; *

2020-10-21 21:58:42 166 1

原创 LeetCode 572. 另一个树的子树 思考分析

题目给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1:给定的树 s:示例 2:给定的树 s:思路思路:首先层序遍历s树,如果遇到结点值和t根结点值相同的,开始比较以该结点为根结点的树与t树是否相同。这里有一些点需要注意:1、s树中可能有许多结点的值和t根结点值相同,所以我们应该对每次比较的结果做记录,如果有相同则直接返回true,否则必须等所有结点都遍

2020-10-21 10:55:55 203

原创 【C++ grammar】对象指针、对象数组、函数参数

1、Object Pointer & Dynamic Object1. Accessing Object Members via PointersObject pointers can be assigned new object namesArrow operator -> : Using pointer to access object membersCircle circle1;Circle* pCircle = &circle1; cout <<

2020-10-20 22:06:28 287

原创 LeetCode 257. 二叉树的所有路径 思考分析

题目给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入:输出: [“1->2->5”, “1->3”]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3思路一:深度递归void traversal(TreeNode* cur , vector<string>& paths,string path) { if(cur == NULL) return;

2020-10-20 13:55:46 248

原创 LeetCode 110. 平衡二叉树思考分析

题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]1/ 2 2/ 3 3/ 4 4返回 false 。思路一:递归...

2020-10-19 22:11:40 205

原创 LeetCode 222. 完全二叉树的节点个数

题目给出一个完全二叉树,求出该树的节点个数。 说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例: 输入:1/ \2 3/ \ /4 5 6输出: 6思路一:层序遍历+计数/** * Definition for a binary tree node. * struct TreeNode { *

2020-10-18 23:44:30 202

原创 【C++ grammar】对象和类(创建对象、对象拷贝、分离声明与实现)

目录1、用类创建对象1、面向对象的特征2、对象由什么构成3、如何定义对象4、创建对象并访问对象成员1. Constructors(构造函数)2. Constructing Objects (创建对象)3. Object Member Access Operator(对象访问运算符)2、对象拷贝以及分离声明与实现1、类是一种数据类型1.1. 定义变量的例子:1.2. 定义对象的例子:2. Memberwise Copy (成员拷贝)3、匿名对象4、局部类和嵌套类5、question-是否存在匿名对象?3、Se

2020-10-18 19:14:56 441

原创 LeetCode 二叉树、N叉树的最大深度与最小深度(递归解)

目录104. 二叉树的最大深度559. N叉树的最大深度111. 二叉树的最小深度之前的笔记中,已经用层序遍历解决过这个问题了现在试着用深度的解法去求解104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。**选择深度遍历方式:**由于我们需要返回深度信息,所

2020-10-18 13:20:58 1128

原创 LeetCode 101. 对称二叉树 思考分析

题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?思路一,超时层序遍历,然后如果该结点是空结点,往该层子数组中填0,否则填val;当此层所有结点都被遍历了(包括空结点),观察子数组是否对称。然后更新queue,如

2020-10-17 20:15:35 234

原创 LintCode 375. 克隆二叉树(深复制)

先序遍历+构造二叉树TreeNode * preorder(TreeNode * root){ if(root==NULL) return NULL; TreeNode * ans; ans=new TreeNode(root->val); if(root->left!=NULL){ ans->left=preorder(root->left); } if(root->right!=NULL){

2020-10-17 18:33:52 229

原创 LeetCode 100. 相同的树 思考分析

给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1/ \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1/ 2 2 [1,2], [1,null,2]输出: false示例 3:输入:

2020-10-17 16:57:48 174

原创 Leetcode226. 翻转二叉树(递归、迭代、层序三种解法)

1、层序法:层序遍历,然后将同一层的所有结点的左右孩子交换/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:

2020-10-17 14:51:23 474

原创 【2020 电设G题 图像题解】

题目要求分析思路代码报告

2020-10-17 13:28:04 8225 37

原创 【C++ grammar】重载、内联、变量作用域、带默认参数的函数

目录1、变量的作用域1. 变量的作用域分类2. Unary Scope Resolution (一元作用域解析运算符)2、重载函数3、带有默认参数值的函数4、重载函数 VS 带有默认参数值的函数5、内联函数(Inline Function)1. 普通函数的优缺点2. 使用内联函数3. 定义内联函数4. 内联函数的使用5. 将内联函数的声明和定义分离6. 内联函数使用限制1、变量的作用域1. 变量的作用域分类a. 全局作用域:全局变量b. 局部作用域:局部变量局部作用域可以分为:文件作用域、函数作用

2020-10-15 19:11:15 288

原创 【C++ grammar】常量、指针、Usage of using, typedef, and #define

常量 (Constant)常量是程序中一块数据,这个数据一旦声明后就不能被修改了。如果这块数据有一个名字,这个名字叫做命名常量;比如 const int A = 42; 其中A就是命名常量;如果这块数据(这个常量)从字面上看就能知道它的值,那它叫做“字面常量”,比如上面例子中的“42”就是字面常量//const datatype CONSTANTNAME = VALUE;const double PI = 3.14159;const int SIZE = 3;int const X = 5;

2020-10-15 13:29:04 257

原创 二叉树笔记(深度遍历与广度遍历+13道leetcode题目(深度3道、广度10道))

本文章为结合leetcode题目以及公众号“代码随想录”的文章所做的笔记!感觉代码随想录的题目整理真的很好,比自己盲目刷题好很多。目录1、二叉树小记1、满二叉树与完全二叉树2、二叉搜索树3、平衡二叉搜索树AVL4、二叉树存储方式5、二叉树遍历方式6、二叉树的定义2、二叉树深度优先遍历递归算法书写1、leetcode144题:2、leetcode145题:3、leetcode94题:3、二叉树深度优先遍历迭代算法书写1、先序遍历(迭代法)2、中序遍历(迭代法)3、后序遍历(迭代法)4、二叉树深度优先遍.

2020-10-15 13:04:09 722

原创 【C、C++基础】什么时候用 “.” 什么时候用“->”(3个实例搞懂)

从堆栈的角度来说:从堆栈的角度来说:对象放在堆上,就要用指针,也就是对象指针->函数;放在栈上,就对象.函数那么如何判断对象放在堆上还是栈上?从我的另一篇笔记【C++ grammar】C++简化内存模型可知:stack(栈)编译器自动分配内存(函数内部定义得局部变量、形参)堆(Heap)一般由程序员分配释放int *p ; char *p;应该是在栈区分配如果是这样p=(int *)malloc(sizeof(int))在C++中则是使用了new是在堆区用个具体的例子说明:

2020-10-09 20:10:45 6491 1

原创 LeetCode 206. 反转链表 思考分析

题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?迭代+双指针从某公众号(代码随想录)搬过来的gif图:看了能很好地理解转置的过程class Solution {public: ListNode* reverseList(ListNode* head) { ListNode*

2020-10-09 18:45:29 189

原创 LeetCode 18. 四数之和 思考分析(双指针解)

目录需要注意的几点1、去除剪枝操作2、去重操作的细节code以及效果:题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[-1, 0, 0, 1],[-

2020-10-09 11:22:34 247

原创 LeetCode 15. 三数之和 思考分析(双指针解)

目录初解:未考虑去重二解:未考虑去重位置三解:AC初解:未考虑去重class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; //对nums排序 sort(nums.begin(), nums.end()); int n

2020-10-09 10:38:11 206 1

原创 LeetCode 27.移除元素 思考分析

暴力法:0ms过class Solution {public: int removeElement(vector<int>& nums, int val) { int size = nums.size(); for (int i = 0; i < size; i++) { if (nums[i] == val) { // 发现需要移除的元素,就将数组集体向前移动一

2020-10-08 23:14:38 188

原创 LeetCode 167. 两数之和 II - 输入有序数组 思考分析

目录1、暴力,超时2、双指针+滑动窗口+条件限制 AC3、观看题解(吸取他人经验)1、暴力,超时class Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int n = numbers.size(); int flag=0; vector<int> res; for(int i=0;i&l

2020-10-08 21:21:44 211

机器学习——正则化.pdf

本人通过观看吴恩达机器学习视频所记录的笔记,比较潦草,有兴趣的可以看一看。 知识点概要: 1、过拟合问题 2、代价函数 3、线性回归的正则化 4、逻辑回归的正则化

2020-03-28

机器学习——多变量线性回归.pdf

本人通过观看吴恩达机器学习视频所记录的笔记,比较潦草,有兴趣的可以看一看。 知识点概要: 1、多元梯度下降法 2、特征与多项式回归 3、正规方程 4、正规方程在矩阵不可逆的情况下的解法 5、编程技巧

2020-03-28

机器学习——单变量线性回归.pdf

本人通过观看吴恩达机器学习视频所记录的笔记,比较潦草,有兴趣的可以看一看。 知识点概要: 1、假设函数 2、代价函数 3、梯度下降法 4、如何选择学习率 5、关于线性回归的梯度下降

2020-03-27

空空如也

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

TA关注的人

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