- 博客(73)
- 资源 (5)
- 收藏
- 关注
原创 c++ 刷题 机器人的运动范围
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:1、从(0,0)开始2、判断当前格子是否遍历过是则执行步骤33、判断当前所在格子是否满足题设条件:行坐标和列坐标的数位之和小于等于k,是则执行步
2020-06-03 14:29:11
332
原创 c++ 刷题 两个单调不减链表合成
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。我的思路:创建一个新的链表头结点,该结点不断地指向两个有序链表的头部较小的元素,每指向一次则被指向的链表后移一位。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode*
2020-05-29 12:10:38
233
原创 c++ 刷题 输入一个链表,反转链表后,输出新链表的表头。
题目描述输入一个链表,反转链表后,输出新链表的表头。思路:头插法:代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL)
2020-05-26 18:40:24
467
原创 c++刷题 输入一个链表,输出该链表中倒数第k个结点。
题目描述输入一个链表,输出该链表中倒数第k个结点。思路:代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead =
2020-05-26 16:20:22
640
原创 VQ矢量量化 LBG算法 c++代码实现 详细注释
参考:1、语音信号处理之(三)矢量量化(Vector Quantization)这篇真的是非常厉害,在CSDN很多矢量量化的文章都是参考了这篇文章2、矢量量化百度文库的PPT,详细的描述了矢量量化矢量量化说明:1、其实矢量量化和k-mean 差不多,区别在于矢量量化是从一个码矢开始分裂的,而k-mean一开始就给你N个聚类中心2、LBG算法是实现矢量量化的一个算法3、LBG算法码矢分裂过程:矢量量化压缩传输过程:1、输出端把输入数据在码书中寻找欧氏距离的最小值的码矢来代表它,并在传输中
2020-05-26 14:43:05
3062
1
原创 c++ 求输入的矩阵的协方差矩阵
参考知识点:1、这个说的非常详细:协方差矩阵计算方法( 推荐手动求解他的例子)代码:#include <iostream>#include<vector>#include<fstream>using namespace std;int main(){ int m, n; cout << "请输入矩阵的行、列数:" << endl; cin >> m >> n; vector<vector<
2020-05-26 13:06:37
2090
原创 主成分分析pca c++代码实现(详细注释)
参考代码:PCA算法的原理以及c++实现(Eigen库实现)源码(我的代码基本都来自与这个,只不过改了改输入输出和加了点注释)参考知识点:1、主成分分析(PCA)原理详解2、(还有很多,基本上看了CSDN的所有pca讲解,就不继续列出了)pca.cpp的步骤:1、对所有样本进行中心化(去均值操作);2、计算样本的协方差矩阵;3、对协方差矩阵做特征值分解;4、取最大的特征值所对应的特征向量;5、将原样本矩阵与投影矩阵相乘: X*V即为降维后数据集X’ ;6、输出:降维后的数据集X’7
2020-05-26 12:45:14
5525
2
原创 c++ 刷题 矩形覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:思路:根据观察:n = 1:f(n) = 1n = 2:f(n) = 2n = 3:f(n) = 3n = 4:f(n) = 5n = 5:f(n) = 8因此根据公式得到递归算法:class Solution {public: int rectCover(int number) {
2020-05-26 10:41:34
534
原创 c++刷题 旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。我的思路:遍历数组,找到第一个比上一个元素小的元素,返回该元素。class Solution {public: int minNumberInRotateArray(vector<int> rot
2020-05-26 10:10:18
139
原创 c++ 刷题 leetcode面试题04. 二维数组中的查找
题目描述:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定
2020-05-25 14:07:05
287
原创 c++ 刷题 leetcode面试题03. 数组中重复的数字
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000我的思路:建立hash映射表:class Solution {public: int findRepeatNumber(vector<int&g
2020-05-25 12:35:37
267
原创 c++ 虚函数和多态、虚函数表
参考:1、c++ primer plus 第六版2、中国大学慕课:程序设计与算法(三)基本概念:虚函数:在类的定义中,前面有virtual关键字的成员函数就是虚函数class A{public: //类中函数声明 virtual void Function();}//类外函数定义void A :: Function(){}说明:1、virtual关键字只需要在类定义里的函数声明时加上,函数定义时不用加2、构造函数和静态成员函数不能是虚函数3、析构函数应当是虚函数4、
2020-05-22 21:50:55
227
原创 c++ 刷题 输入两个链表,找出它们的第一个公共结点。
题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路:初看这题我的第一反应就是这么简单?直接全部遍历找到第一个相同的结点返回就好:代码://自己的/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public:
2020-05-22 15:54:23
432
原创 c++ 继承
类继承:从原有的类派生出新的类,派生的类继承了原有的类的所有成员。.继承类型当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符来指定的。我们几乎不使用 protected 或 private 继承,通常使用 public 继承。当使用不同类型的继承时,遵循以下几个规则:1、公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员
2020-05-21 17:21:13
134
原创 c++ 两行代码求二叉树的深度
今天刷题遇到需要求树的深度的问题,发现代码居然如此简短,记录一下:代码:int TreeHeight(TreeNode* &treeNode){ if(treeNode) return 1+max(TreeHeight(treeNode->left),TreeHeight(treeNode->right)); return 0;}把代码展开一下: int TreeHeight(TreeNode* &treeNode){ //判断是否为空节点
2020-05-21 11:55:06
347
原创 c++ 算术编码
/* 熵编码—算术编码 算术编码把整个信源序列表示为实数线上的0到1之间的一个区间,其长度等于该序列的概率,在该区间内选择一个代表性的小数(最少位数),转化为二进制作为实际的编码输出。 序列中的每个新增元素都要用来缩短这个区间。消息序列中元素越多,所得到的区间就越小,区间越小,就需要更多的数位来表示这个区间。 采用算术编码每个符号的平均编码长度可以为小数。*//* 00 概率: 0.1 区间 [0,0.1) 01 概率: 0.4 区间 [0.1,0.5) 10 概率: 0..
2020-05-20 23:00:58
1623
原创 根据二叉树先序中序后序遍历结果重建二叉树 详细解释
首先得明白什么是二叉树的先序中序后序遍历:c++ 二叉树的创建 前中后序遍历 以及遇到的坑给出先序和中序遍历重建二叉树:思路:1、二叉树的先序遍历的第一个结点是根节点;2、中序遍历的根节点左边的序列是左子树的结点,右边的序列是右子树的结点;3、左子树和右子树分别重复步骤1、2;步骤如下:给出先序和后序遍历重建二叉树:这个无法给出正确的树结构,因为先序(根左右)和后序(左右根)遍历的左右孩子遍历的顺序一样,无法区分。如先序遍历结果 1 2 , 后序遍历结果 2 1 ,我们只知道根节点为1
2020-05-20 18:12:01
1413
原创 c++ 二叉搜索树的创建 代码解释
二叉搜索树的定义:二叉树中每一个节点:若其左子树存在,则其左子树中每个节点的值都不大于该节点值,若其右子树存在,则其右子树中每个节点的值都不小于该节点值。如果想了解更多二叉搜索树的定义:数据结构(二):二叉搜索树(Binary Search Tree)二叉搜索树主要是用来查找和排序的,查找的时间复杂度o(logn) ~ o(n) ,排序只要中序遍历一遍就可以得到有序的序列。代码:#include<iostream>using namespace std;#define Da
2020-05-20 16:57:04
1821
1
原创 c++ 刷题 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:先序遍历结果: 1 2 4 7 3 5 6 8中序遍历结果: 4 7 2 1 5 3 8 61、先序遍历的第一个数据就是根节点2、中序遍历根节点左边的就是左子树,右边的就是右子树3、根据第1、2步可得到根节点、左子树、右子树,接下来就是把左子树、
2020-05-20 15:03:43
1773
1
原创 微信小程序开发学习 第十八天 把图片、视频放到小程序云
小程序上传的文件部分不能超过2m因此除了页面图标以及代码以外基本放不下其他的东西的,而小程序要展示视频、图片等文件就需要事先把资源上传到云,然后在小程序里加载云上的资源:步骤:1、首先创建的小程序得是云开发的模式才能上传资源:2、点击云开发按钮3、进入云开发窗口以后再点击左上角的存储按钮,就可以看到左部有上传文件的按钮,点击即可上传文件4、上传文件后文件会生成访问链接和文件ID小程序加载上传的资源:<image src=" 资源链接 或者 File ID"></ima
2020-05-19 11:38:18
1268
1
原创 c++刷题记录 输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序思路:主要是数学公式:等比数列的和 ,d = 1S
2020-05-18 13:25:21
176
原创 c++ 排序算法 计数排序
参考:排序算法的c++实现——计数排序代码:#include<iostream>#include<ctime>using namespace std;void Individual(int A[], int size){ srand((unsigned)time(NULL)); for (int i = 0; i < size; i++) A[i] = rand() % 100;}void Output(int A[], int size){ co
2020-05-17 23:09:13
226
原创 c++ 排序算法 快速排序 代码详解
参考:算法第四版简介:代码:#include<iostream>#include<ctime>using namespace std;void Individual(int A[], int size){ srand((unsigned)time(NULL)); for (int i = 0; i < size; i++) A[i] = rand() % 100;}void Output(int A[], int size){ cout <
2020-05-17 23:02:47
953
原创 c++ 排序算法 归并排序 代码详解
参考:算法第四版想看图解的话:C++ 归并排序与快速排序手残,不会画简介:上图来源:https://blog.csdn.net/zpznba/article/details/83745205代码:#include<iostream>#include<ctime>using namespace std;void Individual(int A[], int size){ srand((unsigned)time(NULL)); for (int i = 0
2020-05-17 22:55:16
750
原创 c++ 排序算法 堆排序 代码详细解释
参考:算法第四版如果想了解堆排序的基本知识:【排序】堆排序,C++实现代码:#include<iostream>#include<ctime>using namespace std;void Individual(int A[], int size){ srand((unsigned)time(NULL)); for (int i = 0; i < size; i++) A[i] = rand() % 100;}void Output(int A[],
2020-05-17 22:46:57
228
原创 c++ 排序算法 希尔排序 代码详细解释
参考:算法第四版代码:#include<iostream>#include<ctime>using namespace std;void Individual(int A[], int size){ srand((unsigned)time(NULL)); for (int i = 0; i < size; i++) A[i] = rand() % 100;}void Output(int A[], int size){ cout <<
2020-05-17 22:35:50
400
原创 c++ 排序算法 插入排序、选择排序、冒泡排序 代码详解
代码非排序部分在最后参考:算法第四版插入排序://插入排序/*1、第i个元素开始往左移动2、该元素比前一个元素小则两个元素交换,直到该元素大于等于前一个元素(此时也小于后一个元素)3、i<size 执行1,2,每执行一次1,2则前i个元素有序*/void Sort(int A[], int size){ //遍历第一个至最后一个元素 for (int i = 1; i < size; i++) { //使数组0到i有序: 把第i个元素插入到0到i-1的有序数组里(
2020-05-17 22:29:08
226
原创 c++ 学习记录 vector容器使用algorithm库的sort() 排序函数
algorithm库的sort() 排序函数的使用方法参考:C++ STL sort 函数的用法1、sort函数包含在头文件为#include的c++标准库中2、sort函数有三个参数:(1)第一个是要排序的数组的起始地址。(2)第二个是结束的地址(最后一位要排序的地址)(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。vector容器获取首地址:使用 begin()函数vector容器获取结束地址:使用 end()函数
2020-05-17 13:33:14
701
原创 微信小程序 开发学习 第十六天 初步完成不同页面数据同步显示
做了几天晚上的数据结构修改,终于做出点小成果了:动作修改前查看计划界面:修改动作界面增加了一个动作:波比跳动作修改后:回到查看动作页面开始动作界面:小结:关键是页面跳转时要把用户的动作数据保存到缓存,并在新页面展示时加载缓存的数据离开界面前保存数据changeInfo: function () { wx.setStorageSync('userPlan', this.data.userPlanData) console.log('跳转至修改信息页面') w
2020-05-16 22:21:59
624
原创 微信小程序 开发学习 第十五 wx.setStorageSync、wx.getStorageSync的低级错误
遇到的问题:var userPlan = testPlan1 wx.setStorageSync({ key: 'userPlan', data: 'userPlan' })var userPlan1 = wx.getStorageSync({key: 'userPlan'})console.log("testPlan1: "+testPlan1)console.log("userPlan: "+userPlan)console.log("userPlan1: "
2020-05-16 20:16:18
1196
原创 c++ 学习记录 构造函数和析构函数
构造函数:格式1、以类名作为函数名2、无返回值类型class Student{public: //构造函数 Student(); //析构函数 ~Student();private:};作用:初始化对象的数据成员(编译器)类的对象被创建时,编译器为对象分配内存空间并自动调用构造函数已完成成员的初始化种类:1、无参构造2、一般构造(重载构造)3、拷贝构造析构函数:1、对象过期时自动调用的特殊成员函数2、析构函数一般用来完成清理工作3、析构函数的名称是在类名前加
2020-05-16 16:56:02
176
原创 c++ 学习记录 对象和类
何为面向对象(oop):基于对象,以对象为中心,以类和继承为构造机制,来模拟客观世界1、对象是有数据和容许的操作促成的封装体,与客观实体对应2、面向对象是一种编程思想oop的特性:1、抽象2、封装和数据隐藏3、多态4、继承5、代码的可重用性过程性编程和面向对象编程过程性编程:先考虑遵循的步骤,再考虑如何表示这些数据面向对象编程:不仅考虑数据如何表示,还考虑数据如何使用抽象和类抽象:将问题的本质特征抽象出来,并根据特征来描述解决方案。c++中的类:1、类是一种将抽象转换为用户定
2020-05-16 16:33:09
74
原创 c++ 学习记录 const
参考:关于C++ const 的全面总结const 作用:1、可以定义const常量2、便于进行类型检查3、可以保护被修饰的东西4、可以很方便地进行参数的调整和修改5、可以节省空间,避免不必要的内存分配6、 提高了效率const 修饰普通类型的变量代码格式://两种形式无区别//要初始化const int a = 1;int const b = 2;此时变量a的值不可改变const 修饰指针变量1、只有一个const时 如果const位于*左侧,表示指针所致的数据是常量,不
2020-05-16 16:11:33
95
原创 c++ 刷题 心得 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:1、创建一个树结点的队列,先把根结点放入队列2、遍历当前队列的所有树节点,每出队一个树节点就把他的孩子入队3、如果此时队列不为空,执行2代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(N
2020-05-16 11:22:56
827
原创 微信小程序开发学习 第十四天 success()函数data未定义以及点击按钮弹出选择框
在success(res)函数中data未定义:代码: addAction1: function () { wx.showActionSheet({ itemList: ['胸部伸展', '跪姿俯卧撑', '蹲起跳','早安式伸展','俯卧挺身Y,T,W型','腹部拉伸',], success (res) { console.log(res.tapIndex) console.log(this.data.showActionList)
2020-05-14 23:48:17
826
原创 微信小程序开发学习 第十四天 wx:for循环传入js数组的下标 data-index
想做数组的增删改查,传入数组的下标必不可少用到的组件:wx:for-indexdata-index代码 :wxml文件:wx:for-index=“index” 确定下标的名字data-index="{{index}}" 在bindtap事件里绑定数据下标data-index<block wx:for-index="index" wx:for="{{showActionList}}" wx:for-item="item"> <view class="windows1"&
2020-05-14 21:47:15
1868
原创 c++刷题 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。我的思路:1、先验证输入的结点是否为空,空则返回NULL2、判断输入节点是叶子结点还是非叶子结点:3、如果是叶子结点的话判断该节点是左孩子还是右孩子左孩子的情况: 返回父结点右孩子的情况:返回祖先是左孩子时的父结点,如果没有祖先是左孩子(即输入的节点是最后一个元素)返回NULL4、如果是非叶子结点则找输入结点的右孩子的最左端的左孩子输入的结点情况分析
2020-05-14 12:33:34
498
1
原创 微信小程序开发学习 第十二~十三天 开始修改demo底层数据结构
近况:这两天在修改demo的底层数据结构,但是遇到了一个莫名其妙的问题:循环部分:<block wx:for="{{showActionList}}" wx:key="j" wx:for-index="i" wx:for-item="item"> <cover-view class="exercise"> <cover-view>{{item}} {{i}} {{j}} {{action[item].name}}</cover-view> &
2020-05-14 00:03:51
154
原创 c++ 刷题 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。心得
题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。我的思路:起初我是想:链表无非是有环和无环两种情况因此1 遍历每一个链表结点,并把节点的地址存到一个vector数组里2 遍历新的结点时判断该节点是否在数组里这个思路应该行得通,但是最坏情况下的时间复杂度:o(n^2)阶,因为每输入一个元素都得与保存节点的数组比较看是否重复。思路通不代表能行,在写代码时遇到的指针的存储类型的问题,使用int型指针报错,网上搜也没找到什么类型的变量能存储指针的地址(指针又不能放
2020-05-13 21:09:53
182
原创 c++ 二级指针 学习记录
在创建二叉树时用到了二级指针,现在来研究研究。参考:二级指针的作用详解首先得了解相关的符号:&,&a:取地址符,即把变量a的地址取出来*,*a:访问a保存的地址的内容代码#include<iostream>using namespace std;int main(){ int c = 123; int* b = &c; int** a = &b; return 0;}指针内容:可以看到c的值为:123,地址为:0x006ffc
2020-05-12 20:04:35
148
c++ 的eigen库:eigen-3.3.7
2020-05-26
c++ 矢量量化 LBG算法 源码以及数据集
2020-05-26
c++ 矢量量化 LBG算法 源码
2020-05-26
input.txt pca的数据集
2020-05-26
c++ 实现 pca算法 详细注释
2020-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人