自定义博客皮肤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的博客

博观而约取,厚积而薄发

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

原创 leetcode 122. 买卖股票的最佳时机 II 思考分析

目录题目贪心法题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第.

2020-11-30 22:02:04 190

原创 leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法

题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。动态规划解法这个是之前的动态规划的解法:LeetCode 53:最大子序和解题以及优化思路贪心法局部最优:当连续和为负数的时候时候放弃掉,将和sum清掉。从下一个元素重新计算

2020-11-30 21:15:12 322

原创 二分法:两个有序数组长度为N,找到第N、N+1大的数

题目两个数组长度为N,找到第N、N+1大的数思路1:双指针,O(N)复杂度简述思路:如果当前A指针指向的数组A的内容小于B指针指向的数组B的内容,那么A指针往右移动,然后nums(当前已经遍历过的数字个数)也加一。如果此时已经遍历过的数字个数等于N那么九江移动之前的A指针指向的A数组的内容送入result。其他情况,以相反的逻辑进行。//双指针法求解vector<int> GetMid_On(vector<int>& A, vector<int>&

2020-11-30 19:03:48 759 2

原创 leetcode 322. 零钱兑换 思考分析

关键词:动态规划、自底向上可联系eetcode 39. 组合总和,一起思考,并且做区分。一个是求所有解的集合,一个是求最优解

2020-11-27 19:07:50 266

原创 【C++grammar】文件系统以及path类使用

记录了文件path类的用法,以及发现了我的C盘是真的不够用。。。

2020-11-27 16:23:40 2294

原创 VS 如何修改C++编译标准

第一步,打开项目资源管理器的属性页面第二步,选择配置属性->C/C+±>语言->C++语言标准第三步,选择合适的标准,一般来说选最新即可

2020-11-27 15:12:23 3369

原创 leetcode 376. 摆动序列 思考分析

贪心的第二题,不熟悉,记录一波,以后回过头继续看。

2020-11-27 10:20:50 246

原创 剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)

斐波那契数列求解方法:1、暴力递归,含有大量冗余计算,时间复杂度O(2^n)2、备忘录递归解ordp动态规划,可以将时间复杂度降为O(n)3、滚动数组优化,将空间复杂度由O(n)降低至O(1)

2020-11-24 21:39:40 337

原创 leetcode 第 216 场周赛 整理

菜鸡的周赛整理: 216 场周赛

2020-11-24 19:32:33 375

原创 leetcode 455. 分发饼干 思考分析

关键词:贪心、简单题

2020-11-24 14:19:12 194

原创 数学建模:层次分析法实例以及代码

目录层次分析法的思想层次分析法步骤具体案例(市政工程项目建设决策)1.问题提出2.建立递阶层次结构3.构造判断矩阵(成对比较阵)并赋值4.层次单排序(计算权向量)与检验(一致性检验)计算权向量一致性检验5.层次总排序(组合权向量)与检验(一致性检验)6.结果分析7.层次分析法的优缺点层次分析法的代码实现(matlab)层次分析法的思想层次分析法的思想:将所有要分析的问题层次化;根据问题的性质和所要到达的总目标,将问题分为不同的组成因素,并按照这些因素间的关联影响即其隶属关系,将因素按不同层次聚集组.

2020-11-22 22:06:09 33230 4

原创 【C++grammar】动态类型转换、typeid与RTTI

目录动态类型转换1、为何需要动态类型转换2、dynamic_cast<>();运算符3、向上转换和向下转换( Upcasting and Downcasting)4、 基类对象和派生类对象的互操作5、Upcasting/Downcasting与继承链上不同类的对象之间的赋值有什么关系和区别?typeid 运行时查询类型的信息RTTI与typeid 的关系动态类型转换1、为何需要动态类型转换定义一个函数:void printObject(Shape& shape)//sha.

2020-11-22 14:35:28 656 1

原创 leetcode 232. 用栈实现队列 思考分析

题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size

2020-11-20 23:17:01 187

原创 栈与队列在SGI STL的底层实现

栈栈提供push和pop等接口,不提供走访功能,也不提供迭代器。STL中栈不被归类为容器,而被归类为container adapter(容器适配器),这是因为栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可以插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。SGI STL栈的底层实现是用双向队列deque实现的。当然也指定可以vector为栈的底层实现:std::stack<int,std::vector<int>> st;队列STL中队列也不

2020-11-20 22:22:55 347

原创 【C++grammar】访问控制与抽象类与纯虚函数

本笔记记录了可见性控制(private、public、protected关键字对类数据成员访问的限制,对继承的限制),记录了抽象类与纯虚函数的概念以及用法。

2020-11-19 16:44:52 204

原创 【C++grammar】多态、联编、虚函数

本笔记总结了C++11的多态性、静态联编动态联编的区分方法、虚函数的用法、覆写与final操作。也可以直接看第6大点总结,较为简洁和明了。

2020-11-18 21:28:01 342

原创 leetcode 198. 打家劫舍 思考分析

本笔记记录了刷力扣198题的思路和代码。核心:动态规划+滚动数组优化。

2020-11-18 11:27:37 240

原创 leetcode 37. 解数独 思考分析

目录题目核心思路的不断细化1、核心框架2、考虑到每个位置的工作3、考虑到到达最后一列、该位置的数已经预置的情况4、判断是否符合规则的函数5、确定递归终止条件+确定函数返回值AC代码题目编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:1、数字 1-9 在每一行只能出现一次。2、数字 1-9 在每一列只能出现一次。3、数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。 一个数独。 .

2020-11-17 22:44:06 268

原创 leetcode 51. N 皇后 思考分析

目录题目思考AC代码题目n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。思考首先以N=4为例,画出解空间树的一部分:根据模板:void backtracking(参数){ if(终止条件) { 存放结果; return; } for(选择:本层集合中元素(树中结点孩子的数量就是集合的大小)) { 处理结点; backtracking(路径,选择列表); //递归 回溯,撤销处理结果; }}1、确.

2020-11-17 20:14:37 795 1

原创 【嵌入式系统】STM32串口通信的四种方法(基于RTOS)

目录1、串行通信的基本参数2、轮询方式代码效果3、中断方式代码效果4、中断加上时间戳方式代码及效果5、DMA空闲中断方式接收数据1、串行通信的基本参数串行端口的通信方式是将字节拆分成一个接一个的位再传输出去,接收方再将此一个一个的位组合成原来的字符,如此形成一个字节的完整传输,在数据传输时,应在通信端口的初始化时设置几个通信参数。1)波特率,即传送数据的速度。波特率的意思就是在一秒中可以传输的数据位数,单位是bps。如果采用波特率4800bps进行传输,那么每秒可以传输600个byte。2)数.

2020-11-13 22:14:46 2956 1

原创 【C++grammar】名字隐藏与重定义

目录1、继承中的名字隐藏1.基类同名函数被隐藏的现象描述2.问题理解3.避免现象1、继承中的名字隐藏1.基类同名函数被隐藏的现象描述在学习变量作用域的时候知道,全局变量可能被函数里面的同名局部变量所隐藏,如果要在函数里面使用这个同名全局变量,那么就要使用域解析运算符。在继承中也会出现上述类似的情况,下面是名字隐藏的形式:基类和派生类中都有一个同名函数,不同的是派生类的函数有个整型形参。在主函数中调用f(),那么调用的到底是基类的函数还是派生类的函数?class P{ public:.

2020-11-13 20:48:49 327

原创 leetcode 344. 反转字符串 541. 反转字符串 II 双指针解

目录leetcode 3441、题目2、思考541. 反转字符串 II1、题目2、思考leetcode 3441、题目2、思考典型的双指针解法:一个从前往后,一个从后往前,指针对应的交换即可。class Solution {public: void reverseString(vector<char>& s) { int start=0; int end=s.size()-1; if(end == -1) ret.

2020-11-13 11:04:40 248

原创 【C++grammar】继承与构造

1、Inheritance (继承)2、避免一个类被继承( C++11 )class B final {};class D : public B {};编译后的输出是 (Visual Studio)error C3246: “D”: 无法从“B”继承,因为它已被声明为“final”这是程序输出

2020-11-12 17:25:51 352 1

原创 leetcode 47. 全排列 II 思考分析

题目给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。思考分析以及代码这一题和前面的做过的两个题目有所关联:leetcode 46. 全排列 思考分析再加上leetcode 491. 递增子序列 思考分析类似的去重操作。先画出解空间树的图:红色部分才是真正意义上的去重:值相同的跳过。蓝色部分指的是我们用过的元素不能再用了。在组合问题中由于for循环进入下一层是i+1,所以本身就将用过的元素排除了。然而在排列问题中,我们可能要用到序号靠前且没有使用过的元素,所以

2020-11-12 11:43:17 239

原创 【C++grammar】继承与构造test1代码附录

目录1、main.cpp2、circle.cpp3、circle.h4、rectangle.cpp5、rectangle.h6、Shape.h1、main.cpp#include <iostream>#include <string>#include "Shape.h"#include "circle.h"#include "rectangle.h"//创建Shape/Circle/Rectangle对象//用子类对象调用基类函数toString()using.

2020-11-11 19:58:15 218

原创 leetcode 46. 全排列 思考分析

目录1、题目2、思考3、优化1、题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。2、思考老规矩,先画出给出的例子的解空间树:观察我们可以发现:1、深度向下一层深入时,出现过的元素不能再出现,我们能选择的只有没有选择过的元素,此处我用的哈希法set。2、结束条件是:同一个树枝上的结点个数>=nums数组的size().于是可以得到初步代码:注意这里判断元素是否出现过我用的set,后面会有优化class Solution {public: vector&lt.

2020-11-11 11:09:12 278

原创 leetcode 491. 递增子序列 思考分析

题目给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。说明:给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。思考这一题和leetcode 90. 子集 II 思考分析的思想有点像。但是需要注意的是:1、该数组是求递增子序列,所以不能打乱原数组的顺序。2、递增子序列3、递增子序列的长度最少是2其它的思想:回溯、去重其实和leetcode 90. 子集 II 思考分析

2020-11-10 10:50:06 245

原创 【C++grammar】结构化绑定

目录1、定义1、用于原生数组的结构化绑定声明2、用于std::array的结构化绑定声明3、用于对象数据成员的结构化绑定声明1、定义结构化绑定声明是一个声明语句,意味着声明了一些标识符并对标识符做了初始化。将指定的一些名字绑定到初始化器的子对象或者元素上。对于初始化器赋值的理解:1、用于原生数组的结构化绑定声明若初始化表达式为数组类型,则标识符列表中的名字绑定到数组元素。 标识符数量必须等于数组元素数量 标识符类型与数组元素类型一致int main() { .

2020-11-09 20:34:20 521

原创 leetcode 90. 子集 II 思考分析

与本题相关联的题目解析:leetcode 78. 子集 思考分析leetcode 40. 组合总和 II思考分析题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。思考在文章 leetcode 40. 组合总和 II思考分析我们讲过去重的方法,分为树层去重和树枝去重。首先根据例子画出解空间树草图:观察发现,同一层重复取2就要过滤掉,同个树枝上是可以重复取相同元素的。这样就确定了去重条件,在层遍历的for循环中加入://.

2020-11-09 19:19:17 212

原创 【C++grammar】vector类和字符串字面量

C++的vector类用数组存放数据时,容量大小不可变,vector对象容量可自动增大。vector的操作:调用push_back函数时,vector对象的容量可能会增大。观察下列操作对vector的影响:#include <vector>#include <iostream>#include <string>#include "Helper.h"int main(){ //用c++11的列表初始化,创建vector对象words1 std::

2020-11-07 14:29:11 370

原创 leetcode 78. 子集 思考分析

题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。思考分析画出解空间树。我们可以发现我们所需要的结果是解空间的所有结点。而我们之前组合问题和分割问题都是收集树的叶子结点。所以我们只需要将每个结点放入结果中就行了class Solution {public: vector<vector<int>> result; vector<int> res; void backtra

2020-11-07 13:23:20 251

原创 【C++grammar】析构、友元、拷贝构造函数、深浅拷贝

目录1、Destructor(析构函数)在堆和栈(函数作用域与内嵌作用域)上分别创建Employee对象,观察析构函数的行为2、Friend(友元)1、为何需要友元2、友元函数和友元类3、关于友元的一些问题3、Copy Constructor(拷贝构造函数)拷贝构造隐式声明的拷贝构造函数在堆和栈上分别拷贝创建Employee对象4、深拷贝与浅拷贝1、Customizing Copy Constructor(定制拷贝构造函数)2、待解决的疑问1、Destructor(析构函数)析构函数与构造函数正好相.

2020-11-06 21:09:02 527

原创 LeetCode 454. 四数相加 II 思考分析

题目给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。思考这一题和LeetCode 18. 四数之和题目相似,但是本质不同。因为三数之和和四数之和这两道题目使用哈希法在不超时的情况下做到对结果

2020-11-06 14:42:40 284

原创 leetcode 383. 赎金信 思考分析

题目给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)思路思路和leetcode 242. 有效的字母异位词一样,这里不做过多分析。代码class Solution {public:

2020-11-06 14:09:57 233

原创 leetcode 1. 两数之和 思考分析

1、题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。2、思考分析双for循环的时间复杂度O(n^2),而哈希法的时间复杂度为O(1),所以哈希法显然更有效。这里我们使用map而不使用set、或者自构造数组。数组与set的局限:1、数组大小受到限制,如果元素较少,而哈希值太大会造成内存空间浪费2、set是一个集合,里面放的元素只能是一个

2020-11-06 11:35:09 116

原创 leetcode 202. 快乐数 思考分析(哈希集合与双指针解)

1、题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。思考分析对一个数不断进行get_sum操作,那么最终可能的结果有两种可能:1、得到12、计算的数陷入某种循环,然后会有重复的数出现如果得到1,直接返回true;如果检测到重复

2020-11-06 11:03:08 214

原创 【C++grammar】代理构造、不可变对象、静态成员

Delegation Constructor(代理构造)1. What is delegating constructor? (什么是代理构造/委托构造)代理构造:一个构造函数可以调用另外的构造函数在代理构造的时候,被委托的要放在委托的构造函数的初始化列表的位置,不能放在在括号里面。class A{public: A(): A(0){} A(int i): A(i, 0){} A(int i, int j) { num1=i; num2=j;

2020-11-05 22:33:06 364 2

原创 leetcode 93. 复原IP地址 思考分析

题目给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是 有效的 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效的 IP 地址。思考这一题和leetcode 131. 分割回文串 思考分析很像,都属于利用回溯法分割字

2020-11-05 16:39:15 357

原创 【C++grammar】断言与表达式常量

目录1、常量表达式和constexpr关键字2、断言与C++11的静态断言1.1. assert : C语言的宏(Macro),运行时检测。1.2. assert()依赖于NDEBUG 宏1.3. assert 帮助调试解决逻辑bug (部分替代“断点/单步调试”)2.1static_assert (C++11的静态断言 )2.2. 作用:编译时断言检查2.3. static_assert的用途3. 1When to use assertions (何时使用断言)3、声明与定义1. What is "De.

2020-11-04 23:46:31 321

原创 leetcode 131. 分割回文串 思考分析

题目给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。思考问题可以分为两个子问题:1、判断回文串2、分割数组判断回文串bool isPalindrome_string(string s,int startindex,int endindex){ for(int i = startindex,j = endindex;i<j;i++,j--) { if(s[i] != s[j]) return false;

2020-11-04 17:45:17 257

机器学习——正则化.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关注的人

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