- 博客(44)
- 收藏
- 关注
原创 剑指offer刷题(1)
同样大小的元素选了就不能再选第二遍了。因此,前一个与自己相同的元素并且被标注过没被访问过,则说明前一个元素已经遍历过了(因为数组排序过,从小到大遍历),后面恢复自己之前的状态了(回溯),因此当前元素不能作为本层元素。如果前一个元素与自己相同,但是显示已经访问过了,说明前一个元素是用在前面某层递归中了,不属于当前层,于是当前元素可以使用。但是本题有许多细节需要考虑,例如元素可能大于数组长度n,元素中可能有负数,需要额外考虑。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。
2024-08-17 23:16:55 116
原创 二分查找(精确查找、范围搜索)
二分查找法,也称为二分搜索法或折半查找法,是一种在有序数组中查找特定元素的搜索算法。其基本思想是,通过不断将待查找的区间分成两半,并与待查找的元素进行比较,根据比较结果调整查找区间,直到找到元素或区间被缩小至0为止。时间复杂度为O(log n)使用条件:二分查找要求数组必须是有序的,无论是升序还是降序。如果数组无序,则需要先进行排序操作。易错点:while循环过程中,left与right的关系容易错乱;left与right指针的移动容易错。
2024-07-28 16:50:36 786
原创 Leetcode算法题笔记(3)
目录矩阵101. 生命游戏解法一解法二栈102. 移掉 K 位数字解法一103. 去除重复字母解法一堆104. 查找和最小的 K 对数字解法一解法二105. 丑数 II解法一解法二双指针106. 删除有序数组中的重复项解法一107. 合并两个有序数组解法一解法二解法三108. 比较版本号解法一解法二109. 验证回文串解法一滑动窗口110. 重复的DNA序列解法一解法二111. 存在重复元素 II解法一112. 找到 K 个最接近的元素解法一解法二113. 最长重复子数组解法一解法二链表114. 旋转链表
2024-05-22 21:36:26 1280
原创 Leetcode算法题笔记(2)
目录图论51. 岛屿数量解法一52. 腐烂的橘子解法一53. 课程表解法一54. 实现 Trie (前缀树)解法一回溯55. 全排列解法一56. 子集解法一解法二57. 电话号码的字母组合解法一58. 组合总和解法一解法二59. 括号生成解法一解法二60. 单词搜索解法一61. 分割回文串解法一62. N皇后解法一二分查找63. 搜索插入位置解法一64. 搜索二维矩阵解法一65. 在排序数组中查找元素的第一个和最后一个位置解法一66. 搜索旋转排序数组解法一67. 寻找旋转排序数组中的最小值解法一68.
2024-03-25 14:57:11 941
原创 Leetcode算法题笔记(1)
目录哈希1. 两数之和1.1 解法11.1 解法22. 字母异位词分组2.1 解法12.2 解法23. 最长连续序列3.1 解法小结双指针4. 移动零4.1 解法14.2 解法25. 盛最多水的容器5.1 解法一5.2 解法二6. 三数之和6.1 解法16.2 解法27. 接雨水7.1 解法1解法二小结滑动窗口8. 无重复字符的最长子串8.1 解法19. 找到字符串中所有字母异位词9.1 解法一9.2 解法二子串10 和为k的子数组解法1解法211. 滑动窗口最大值解法一解法二12. 最小覆盖子串解法1数
2023-12-07 23:29:41 1644 1
原创 C++ 11 新特性
当final关键字用于修饰虚函数时,声明该类已经是整个继承体系中最后一个能重写该虚函数的派生类了,后续继承该类的派生类中不允许在重写该虚函数了。
2023-11-13 22:20:22 808
原创 Libevent网络库原理及使用方法
Libevent是以个基于C语言编写的轻量级的开源高性能网络库,被广泛使用。Libevent本质上是对已有的系统I/O多路复用技术进行了特殊封装,并统一接口实现I/O,定时器和信号事件Reactor模式,事件驱动,轻量级,性能高;支持I/O多路复用技术,例如select,poll,epoll、kqueue等;跨平台,支持Windows,Linux,BSD 和 Mac Os;支持I/O,定时器和信号等事件,并将它们统一于库内。
2023-11-01 18:24:23 715
原创 Makefile——Linux下C/C++编译方法
静态库可以在编译c项目时,将引用的库一起链接到可执行文件中,可执行文件在运行时不再需要库的支持,但可执行文件会变大。fPIC: (Position-Independent Code), 产生的没有绝对地址,全部使用相对地址,代码可以被加载到内存的任意位置,且可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。动态库在程序编译时不会链接到目标代码中,而是在程序运行时才被调用,可执行文件比静态链接的可执行文件要小。编译C++的流程与编译C几乎一致,只不过用的时g++命令。
2023-10-16 11:12:18 2562
原创 C++ STL之容器(使用方法)
容器就是数据结构,用来将数据元素按照一定的规则进行排列,不同的容器拥有不同的排列规则,不同的排列规则可以达到不同的数据操作特点。容器只需要提供迭代器 算法只需要拿到迭代器就可以完成容器和算法之间的关联和操作顺序容器:数组(array),动态数组(vector),双向队列(deque),双向链表(list),单向链表(forward_list),字符串(string)
2023-10-14 11:38:52 408
原创 C++ STL体系结构
下例分配器为G2.9版本的alloc(目前的__pool_alloc采用16个链表管理内存,每个链表管理同样大小的内存块,0号链表每块内存为8字节,1号链表每块内存为16字节,依次以8的倍数增长。当程序需要用到某一个大小的内存块时,首先看链表中是否有该大小的内存块链表,如果没有则一次性malloc申请一大块,只有一个cookie信息,然后切割为若干个该大小的小内存块,用单向链表连接。因此,malloc每次分得的内存大小总是大于表面上申请的内存大小(申请的内存大小+该块内存的cookie信息)。
2023-10-09 22:14:28 219
原创 More Effective C++学习笔记(5)
此外,新建一个没有数据成员的间接类B,其构造函数用于调用类A中在map中新增处理函数的静态成员函数,添加新的派生类型时可以在全局构造该间接类,保证在运用不同类型处理函数之前已经在map中加入了对应的处理函数。例如,如何让同一个函数collision(),在接收(SpaceShipe对象,SpaceStation对象)时与接收(SpaceShipe对象,Asteroid对象)行为不同。(3)方法3:直接声明一个类静态成员变量对已构造的对象计数,构造一个对象就+1,析构一个对象就-1,如果无资源就抛出异常。
2023-09-09 00:10:21 349
原创 More Effective C++学习笔记(4)
类的相关信息存储在类型为type_info的对象里,能通过使用typeid操作符访问一个类的type_info对象。RTTI耗费的空间是在每个类的vtbl中的占用的额外单元再加上存储type_info对象的空间。这个方法是使用局部缓存,用开销相对不大的内存中查询来替代开销较大的数据库查询。:每个声明了虚函数的对象都带有它,它是一个看不见的数据成员,指向对应类的virtual table。,不过虚基类也会增加一定的成本,类对象中可能有多个虚指针(隐藏指针)。,相当于告诉编译器“我知道我在干啥,没事儿!
2023-08-24 16:56:17 503
原创 More Effective C++学习笔记(3)
当通过传值(by-value)方式捕获时,异常对象被拷贝了两次(第一次是异常传递时生成的一个临时对象,第二次是临时对象给catch的形参赋值)。,因为异常里面参数传递都是副本,传引用也不是为引用异常抛出前的原始对象,而是相较于by-value减少一次副本拷贝。,因为函数参数要求传入引用说明想修改引用的变量,结果变量是临时对象,即使修改了也是做无用功,所以编译器不允许;,因为异常catch匹配是顺序匹配(最先匹配的catch),不是最佳匹配。(2)对象做为异常被抛出与做为参数传递给函数相比,
2023-08-22 17:17:01 298
原创 Effective C++学习笔记(8)
operator new应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用new-handler。当new一个对象时,第一步调用分配内存的operator new,第二步调用对象类的构造函数。如果第一步调用成功,但在第二步抛出异常,步骤一中的内存分配必须取消并恢复旧观,否则就会造成内存泄漏。万一class专属的operator new将大小有误的分配行为转交给标准::operator new执行,你也必须将大小有误的删除行为转交::operator delete 执行。
2023-08-16 23:19:10 401
原创 Effective C++学习笔记(7)
模板中,根据实参推导模板参数类型时不支持隐式类型转换推导。如果一个模板类中,模板内的函数需要参数类型转换,成员函数无法做到。函数参数隐式类型转换之前需要确定该函数存在,而实例化之前成员函数并不存在。可在模板类内中采用friend函数声明和定义,使其声明跟随模板类一起实例化,之后再调用的时候就可以自动找到该函数的声明,进行隐式类型转换(下图中可在*重载中输入int类型数据,使其隐式调用Rational的int类型构造函数,隐式转换为Rational<int>)。
2023-08-16 16:59:52 206
原创 Git与Github常用方法
如果是MIT这种,就代表你只要保留了原作者的一些版权信息在源代码里,基本上就可以无限制使用,也不用付费。提交更改(pull request)看到别人仓库的东西,想提出修改意见,可点击“pull request”,上传自己修改过的代码和描述。Git是一款分布式源代码管理工具(版本控制工具) ,可以用来合作开发项目,不同阶段提交代码的回溯等等,经常与Github搭配使用。提交疑问(Issues):基于查看过代码仓库的前提提交问题和提交说明,仓库创建者有权利关闭问题并和网友评论问题以及添加标签。
2023-08-09 17:00:47 2537 1
原创 Effective C++学习笔记(6)
原因:当一个指向子类对象的指针调用被重写的non-virtual函数时,调用父类还是子类的non-virtual函数并不取决于对象是子类对象还是父类对象,而是取决于最初指针声明的类型。此外,我们也应当遵守适用于基类对象的每一件事,也适用于继承类对象;基类的派生类一定会继承non-virtual的接口和实现。原因:缺省参数值都是静态绑定,而virtual函数是动态绑定。静态类型:被声明时采用的初始类型;动态类型:目前所指对象的类型。虚函数调用哪一个取决于动态类型是哪一个对象。
2023-07-18 16:04:26 815
原创 Ubuntu20.04下OpenCV 4.5环境配置与代码g++、Cmake编译方法
在Ubuntu20.04下OpenCV 4.5环境配置与代码g++、Cmake编译方法
2022-08-10 00:39:02 1931
原创 MATLAB画柱状图(包括普通柱状图,多组柱状图,三维柱状图)
1.普通柱状图代码:clc;clear;%确定图片的位置和大小,[x y width height]figure('visible','on','position',[350,200,800,550]); %准备数据X = [70,75,80,85,90];%每个柱子的颜色设置color = [200,65,68;200,132,174;249,199,179;100,190,190;10,250,139]/255; hold on% 添加5个柱子,facecolor用来修改颜色
2022-04-19 13:07:10 85185 6
原创 Linux服务器安装NodeJs简易方法
一开始尝试用g++编译nodejs源码来安装nodejs,但是在编译过程中非常容易出现各种各样的编译错误问题,无法解决,功亏一篑。在踩了坑后,找到了一种基本上百分百成功的安装步骤。1.连接自己的云服务器可以通过Xshell来连接自己的服务器。打开Xshell,创建一个会话,自己选择一个容易辨识的名称(图中”hhh“),主机填自己的服务器ip,其他不变。之后按照弹出的对话框依次输入用户名(一般是root),以及密码。或者直接在创建的会话框中输入:ssh 用户名@服务器ipssh root@121.
2022-04-09 02:03:31 8766 1
原创 Matlab中特征降维主成分分析(PCA)使用方法(整套流程)
PCA(Principal Component Analysis)主成分分析方法是一种常见的数据降维方法。数据维度过高可能会使得模型效果不佳。PCA主要原理是将高维原数据通过一个转换矩阵,映射到另一组低维坐标系下,从而实现数据降维。...
2021-12-24 13:37:21 22486 14
原创 MATLAB中libsvm的svmtrain和svmpredict函数的使用方法与参数设置
MATLAB中libsvm的svmtrain和svmpredict函数的使用方法与参数设置
2021-12-15 16:46:22 21195 2
原创 Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题
Matlab中数据拟合函数lsqcurvefit的使用方法与常见问题
2021-12-13 21:27:55 38674 2
原创 机器学习(三):支持向量机SVM(含代码和注释)
目录1. 线性可分2. 支持向量机SVM1. 线性可分二维空间中,线性可分数据表示为可用一条直线分开两类数据;若不存在一条直线分开两类数据,则为非线性可分可以把它拓展到更高维度空间。若在三维空间中有一个二维平面能分开两类数据,则为线性可分;否则线性不可分。若在N维空间中有一个N-1维平面能分开两类数据,则为线性可分;否则线性不可分。以二维空间为例,若一条直线w1x1 + w2x2 + b = 0能分开两类数据,则可定义( w1x1 + w2x2 + b < 0) 和 ( w1x1 + w
2021-10-18 19:57:20 2198 2
原创 机器学习(二):线性模型与非线性模型(激活函数,归一化)
激活函数激活函数的作用是在神经网络模型中加入非线性映射,克服了线性模型表达能力不足的缺点。线性模型一元线性模型如y = wx+b,x为自变量,y为因变量。在二分类问题中,可以看作区域被模型所表示的直线分为了两个区域多元线性模型如y = w1x1+w2x2+w3x3+b在二分类问题中,可以看作三条直线两两相交,分成内区域与外区域对于简单的线性可分数据,线性模型可以完成的很好。但是对于非线性可分数据,往往效果不好,而生活中非线性可分的任务占绝大多数。例如下图,要用多条直线进行分类。非
2021-10-18 11:57:07 4988
原创 机器学习(一):BP神经网络(含代码及注释)
目录人工神经网络神经网络分类BP神经网络代码实现人工神经网络 人们利用数学模型来模仿生物神经元传递信息以及做出决策等等。 下图神经网络数学模型可以等效为输入矩阵X与系数矩阵W相乘并加上偏置项求和,并利用激活函数 f() 进行映射,从而得到输出。其中,系数矩阵W和偏置项是需要我们利用训练集数据进行调整优化,使得整个网络能完成特定任务。神经网络分类按照连接方式
2021-10-17 17:34:15 9538 8
原创 学生成绩管理系统(C语言)
学生成绩管理系统功能菜单查询学生信息修改学生信息删除学生信息显示学生信息各科成绩各分数段人数统计退出系统异常输入报错学生成绩管理系统代码(含注释)Function.h文件代码:#ifndef _CHANGEINFOR_H#define _CHANGEINFOR_H#include <stdio.h>#include <stdlib.h>#include<string.h>#define ClassNum 3//结构体struct
2021-10-17 00:36:08 3394
原创 linux常用指令笔记(1)
命令格式:命令 【-选项】【参数】1.目录处理命令:ls 原意:list命令所在路径:/bin/ls执行权限:所有用户功能:显示目录文件,不加选项和文件目录时,显示当前目录下的文件常用选项搭配:ls 【-选项】【文件或目录】-a 显示所有文件,包括隐藏文件-l 详细信息显示(一般与-h搭配使用 -lh 将其中文件或目录大小用k M等单位表示)-d 查看目录属性-i 显示文件索引号ls -l 所显示信息:例:-rw-...
2020-10-08 14:28:56 130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人