12 2020 档案
摘要:Hard题目,之前也想到了从1开始遍历直接打表进行边界判断,但是一直设想的是寻找某种方法进行逐个元素的遍历,但是没有想到可以直接进行乘2边界判定; 值得注意的点是,看似最大边界是2的阶乘,其实不然; 如果nums数组中含有已经可以正常的元素,则边界会发生改变,究其原因题目中是指定每个元素只可以出现一
阅读全文
摘要:简单题,没什么好说的,Hash数组+两次遍历可破; int firstUniqChar(string s) { for (int i = 0; i < s.size(); i++) { hashtable[s[i] - 'a']++; } int index = 0; for (int i = 0;
阅读全文
摘要:降维问题: 首先需要理解的:降维的本质操作时是什么? 之前自己理解的只是通过找到一系列新的坐标轴来表示原始数据,但是从来没有细细深究背后的数学原理; 例如对于特征空间为二维的坐标点来说,其拥有两个特征,所以在特征空间中采用(x,y)两个参变量进行表示; 但是对于我们数据分析来说,如果变化的趋势或者方
阅读全文
摘要:矩阵奇异值分解主要应用在降维方面,和特征值分解为特征向量其实是一样的思想; 本质就是找一个低维空间,把高维空间的点映射到低维空间里面去,例如典型的PCA主成分析就用到了这一点; 特征值分解: 首先值得关注的是特征值分解问题,从特征值分解问题可以看出奇异值分解的一些思路; 通常对于数据降维来说,主要的
阅读全文
摘要:中等难度题,如果使用最简单的层序遍历思想开数组层序遍历返回,空间复杂度会高一点; vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>>rvec; queue<TreeNode*>que; bool fla
阅读全文
摘要:手动设计神经网络以及手写传播极其麻烦,所以一般采用直接反向传播autograd或者直接使用optim模块进行求解; 一般使用自动反向传播使用backward函数进行; loss = loss_fn(model(t_u, *params), t_c) loss.backward() params.gr
阅读全文
摘要:动规问题,如果直接使用滚动数组不开空间会效率更高,所有效率可以提升百分之40左右; 状态转移方程: dp[i]=min(dp[i-1],dp[i-2])+cost[i]; class Solution { public: int minCostClimbingStairs(vector<int>&
阅读全文
摘要:主要是给了一个简单的实例去展示系统的一个完整的线性回归模拟是什么样的; 例如,对于一个简单的线性回归模型,我们采用如下公式进行模拟: 可以自己拟定数据集: t_c = [0.5, 14.0, 15.0, 28.0, 11.0, 8.0, 3.0, -4.0, 6.0, 13.0, 21.0] t_u
阅读全文
摘要:本章节主要讲述如何利用python和pytorch来读取csv文件; 主要重点在于以下几个: 1.如何读取csv文件; 2.关于切片问题; 3.如何从单值target来构建one-hot target; 4.关于高级索引的问题; 5.各种均值和方差函数的使用; 一、CSV文件读取: 关于csv文件读
阅读全文
摘要:张量基本概念: 张量其实就是tensor,和tensorflow里的基础数据结构相同,本质就是N维数组; 张量的提出本质是为了优化底层数学计算速度; C++和python这种解释型语言相比之所以有优越性,本质就是因为所有类似于内置类型的数值都是采用连续内存直接存储; 而python则是以对象类型进行
阅读全文
摘要:本章节主要讨论参数转换的问题,炸出来很多之前没怎么看到的点; 对于书上之前,举了这样一个返回const by-value的例子; #include<iostream> #include<vector> using namespace std; class rational { public: rat
阅读全文
摘要:本章节主要概述了非成员、非友元函数和成员函数的抉择问题; 本章节主要指出了如果盲目的增加成员函数,调用其他的成员函数,会破坏数据的封装性; 原因:如果对private成员访问越多,约会破坏数据的封装性,所以使用非成员、非友元函数,可以保障数据的封装性,因为只会访问public数据; 并且本章节也大致
阅读全文
摘要:通过大量的篇幅说明了两点,但是自己没有接触过太大的工程性代码,所以缺乏这样的思想; 1.将成员变量设置为private,并且通过一些函数对其操作、修改和约束; 2.protect不比public更具有封装性;
阅读全文
摘要:本章主要针对于返回引用做了一些相关的解释,并且涉及到了heap和stack空间的相关概念; 注意一下堆和栈的相关概念: 相当于C++来说,栈空间相当于显式直接声明,不用定义,回收由编译器负责,典型的回收情况是出了作用域自动销毁; 而堆空间则是通过new/delete来进行分配和回收,并且值得注意的是
阅读全文
摘要:本章之前在C++primer上看到过,N年前的东西,但是一直不太清楚,并且终于发现了以前自己没太注意的一个点。。。 本章节主要涉及const引用、普通引用、值传递三方面的内容; 英文称之为:pass-by-reference-to-const\pass-by-reference\pass-by-va
阅读全文
摘要:本章节主要讲述了一些基本的class设计理念以及一些需要注意的地方; 个人认为需要重新补一下设计模式相关的东西,毕竟发现从本章开始,技术层面涉及的不多,全是设计理念的问题; 关于class类的考虑应该有如下形式: 1.新type的对象如何创建和销毁,例如operator new或者operator
阅读全文
摘要:本章节主要讲述了关于接口的使用问题,也就是如何设计一个被正确使用,而不是被误用的接口; 文中主要针对以下点做了阐述: 1.注意类型系统错误:例如传参中传入的类型和所需要的类型并不符; 2.限制类型内操作:防止因为用户的操作来进行未定义的操作; 3.避免忘记一些操作:经典的shared_ptr指针的问
阅读全文
摘要:本章节主要是声明了智能指针初始化传参的一些细节问题,本质原因还是因为C++的缺陷; C++是真的淦,还是JAVA足够方便; 建议的步骤,如果进行新的new对象传参,一定先保证智能指针初始化,再将智能指针当作参数用于其他用处,也就是分离操作; 书上给了一个特别典型的例子: pocesswidget(s
阅读全文
摘要:本章节主要讲述了new和delete的一致性问题; new和delete主要有两种形式: 1.单对象的new和delete形式; 2.多对象类数组的new[]和delete[]形式; 如果对于new[]形式采用delete来释放空间,则会造成只释放第一个地址空间; 并且书中给出了一个经典例子,不要随
阅读全文
摘要:一直觉得可能这种方法破坏了对于原始资源的封装性,但是书上的一句话说的特别好:资源管理类并不是为了封装而存在的,是为了delete而存在的; 所以,返回原始资源的访问,并不算破坏封装性; 原始资源的使用往往和C API接口有关,所以本章节给出了几个例子,如何返回原始资源; 针对于智能指针而言: Inv
阅读全文
摘要:条款十三讲解了heap_base下的资源类管理问题,旨在使用auto_ptr和share_ptr进行资源管理; 但是很多情况下需要自定义类来进行管理,因为并不是所有的资源都是heap_base的,但是资源管理类必须要注意赋值和符号赋值的问题; 文中采用了经典的mutex的例子,对mutex进行封装,
阅读全文
摘要:本章节主要描述了资源释放可能出现的问题; 其中比较着重讲述的是指针资源释放的例子,并且阐述了一个关键点:资源的释放最好交给类来解决,而不是使用delete进行显式的处理; 考虑如下例子: class test { public: test(); }; test* creatTest(); void
阅读全文
摘要:本章主要讲述了两大复制函数(符号赋值和赋值函数)的存在问题,这次是第一次接触,所以没有什么印象; 关于类内成员可能遗漏的问题: 如果我们不对函数进行指定,不适用默认的赋值函数,会导致编译器不会对复制对象进行检查,换句话说就是无论漏掉成员也不会报错; 因此,我们在制定赋值函数,必须要对操作负责,所以每
阅读全文
摘要:对于自我赋值,第一反应是形如x=x的形式,这只是最常见的一种而已; 对于自我赋值,往往存在都比较隐式:例如指向同一对象的指针或者引用进行赋值,也算是自我赋值的一种; 比较直观的是在派生和继承中的指向问题; 例如:两个不同的指针分别指向基类base和派生类derived,但是由于base指针任然可以指
阅读全文
摘要:该条款主要是为了连锁形式而服务,即形如: x=y=z=15; 即: x=(y=(z=15)); 为了能够实现该功能,常常采用返回赋值符号的左边变量(当然其他操作也可以这样进行); 即如下所示: class wideget { public: wideget& operator+=(const wid
阅读全文
摘要:本章主要讲解了多态情况下在构造函数内调用virtual的问题; 针对于多态情况下,我们希望根据指针指向的类型调用不同的虚函数,但是在构造函数中可能存在问题; 例如下列例子: class Transaction { public: Transaction(); virtual void logTran
阅读全文
摘要:本章节主要描述了析构函数异常捕捉的问题; 对于C++来说,有一条重要的异常捕捉规定:所以异常都可以抛出,但是不可以在析构函数内进行传播; 所以对于析构函数,一定要注意异常问题,要么捕捉,要么强行结束; 但是由于程序强制结束并不科学,所以一边采用捕捉的方式来进行处理; 但是一旦出现异常,必定意味着程序
阅读全文
摘要:对于析构函数是否virtual主要看是否实在多态的情境下; 对于基类来说,首先需要明确的是,不是所有的基类都已多态为目标而诞生,例如条款6中曾经提过关于赋值和符号赋值的做基类的问题; 对于多态性来说,我们时常使用一个指向基类的指针来进行虚函数的调用; #include<iostream> using
阅读全文
摘要:本章节针对于条款6做出了一个补充,旨在指出如何避免使用编译器的默认四大函数,即构造、析构、copy、assignment copy四类函数; 由于某些情况下我们不希望copy和assignment copy的存在,保持每个实例化类的独一无二; 但是如果不进行指定,会让编译器默认构造,所以必须要寻求某
阅读全文
摘要:本章节主要讲述了如果不指定类内构造、析构、赋值函数所可能出现的坑; 对于每一个类,如果不指定任何函数,则编译器会帮助使用者构建四类基本函数: 1.构造函数:构建; 2.析构函数:析构; 3.赋值函数:主要针对于实参括号初始化所使用的函数; 4.符号赋值函数:利用等号进行函数赋值的函数; 其中构造析构
阅读全文
摘要:本条款主要讲解了类成员初始化的问题; 本章的宗旨旨在初始化类成员,保证类成员能够成功初始化,防止未初始化造成使用之外的错误; 初始化列表: 作者希望人们使用初始化列表而构造函数体内赋值的方式进行初始化的定义; class test { private: int a; string s; double
阅读全文
摘要:本章节主要讲解了const的一些应用问题,并且通过例子系统的讲解了const的使用场景和方法; 针对于指针和函数来说: 首先注意的是变量、指针和函数返回时使用const修饰时的场景; char greeting[] = "hello"; const char* a=greeting; char* c
阅读全文
摘要:该章节主要描述了#define的相关缺陷问题; #define的主要作用主要有以下几个方面: 1.常量宏:提前进行预处理变量的定义; 2.函数宏:类似于inline函数来进行代码或者简单函数展开; 但是尽管#define可以发挥作用,仍然会有相关的缺陷; 针对于问题1的缺陷,主要是在编译报错方面存在
阅读全文

浙公网安备 33010602011771号