Android_chunhui
码龄8年
  • 112,846
    被访问
  • 148
    原创
  • 1,730,623
    排名
  • 21
    粉丝
关注
提问 私信

个人简介:人不一定能什么都擅长,有自己的特点就好!

  • 加入CSDN时间: 2014-10-30
博客简介:

Android_chunhui的专栏

查看详细资料
  • 1
    领奖
    总分 92 当月 4
个人成就
  • 获得38次点赞
  • 内容获得24次评论
  • 获得176次收藏
创作历程
  • 6篇
    2021年
  • 4篇
    2020年
  • 79篇
    2019年
  • 21篇
    2018年
  • 17篇
    2017年
  • 44篇
    2016年
  • 1篇
    2015年
成就勋章
TA的专栏
  • c++书籍阅读笔记
    2篇
  • leetcode
    40篇
  • C++小记
    29篇
  • 机器学习
    8篇
  • 服务器与数据库
    4篇
  • opencv
    5篇
  • tensorflow
    7篇
  • text detection
    10篇
  • 计算机视觉
    12篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

设计模式--策略模式

多态:同一类型的指针或引用在指向不同子类对象时可以表现出不同的行为。我们知道多态最常见的实现方式就是基类定义虚函数,派生类通过继承基类的函数后,对基类函数重写来实现。但是在项目中,往往出现表现多态的类本身改动很小,而该类簇的行为改动频繁,(或者可能行为的实现时算法同学负责,而多态类时我们架构同学负责)那么我们把多态类视为使用行为的上下文,把行为从中抽象出来定义成行为类,这就引出了多态实现的另一种方式:通过继承基类的行为对象成员,然后派生类将成员初始化为不同的行为派生类对象,这样在调用行为类对象的方法时就能表
原创
发布博客 2021.06.27 ·
27 阅读 ·
0 点赞 ·
0 评论

设计模式--工厂模式

文章目录使用场景工厂模式应用很广,重构场景:冗长switch:如果case比较多而且每个case处理处理程序比较复杂(即使将其封装到函数也不容易管理,而且可读性不高,每次要重新阅读case),都可以通过"简单工厂模式"优化:将//优化前{switch(cmd) {case HTTP_REQ_CMD: process_http_req(); break;case RPC_REQ_CMD: process_rpc_req(); break;case:...}//优化后cla
原创
发布博客 2021.06.20 ·
32 阅读 ·
0 点赞 ·
1 评论

c++探险--有虚函数时的继承

父类没有虚函数我们都知道子类在继承父类的时候,会将父类的变量和虚表指针继承下来保存到自己的内存里(即使父类private变量的内存也会继承下来,只会无法访问到),也就是子类对象内存中存储着一个父类对象。如果使菱形继承,那么"菱形"底部的类就会存储两份"菱形"顶端的类对象内存,通过虚继承可优化成一份,暂且不表。class Base {public: int a;private: int b;};class Sub : public Base {int c;};#mermaid-svg.
原创
发布博客 2021.06.20 ·
25 阅读 ·
0 点赞 ·
0 评论

写出优雅代码

目录一. 封装,继承,多态封装继承多态二. 设计原则单一职责一. 封装,继承,多态封装尽可能隐藏一个模块的实现细节。原因:增加调用者负担,使用者在使用你的类时还要知道实现细节。耦合性。比如类内部有个成员是vector,那么外部应该用push_back等方法来操作,有一天需要换城map,那么所有调用方的代码都得改。应该对外界提供访问数据的方法(getter、setter);而不是直接将数据等实现细节暴露出去。继承不能仅仅因为is-a和is-kind-of就定义为继承关系,必须是派生类能够适
原创
发布博客 2021.05.27 ·
22 阅读 ·
0 点赞 ·
0 评论

再探git

–cached == --stagednot staged:文件已经存在暂存区,工作区文件修改了但还没add到Stagenot tracked:工作区新建的文件,从未添加到Stage。git status : 查看暂存区和本地仓库的状态。git ls-files : 显示暂存区的文件,git commit/push之后,记录仍在。–cached : 显示暂存区里的文件(默认)–deleted:显示从暂存区删除的文件(git rm file :从Stage中删除)–modified:显示.
原创
发布博客 2021.05.09 ·
16 阅读 ·
0 点赞 ·
0 评论

桶原理的应用

鸽笼原理计算最大间距问题:要求线性时间复杂度下计算数组元素在排序后的最大间距。如果直接对数组排序那么时间复杂度是nlogn,这里使用桶,设置n+1个桶这样n个元素放入后至少出现一个空桶,这就使得不同桶之间的元素差大于同内部的元素差(因为空桶两侧的桶元素差>=width,桶内元素差<width)。计算所有相邻非空桶之间元素差值(相邻桶之间的元素差可能大于空桶两侧的桶元素之间元素差)。int largestDiff(vector<int>& nums) { int.
原创
发布博客 2021.01.09 ·
72 阅读 ·
0 点赞 ·
0 评论

单调栈

leet"255. 验证前序遍历序列二叉搜索树"题解:先序遍历搜索树,只有左子树时元素是单调递减的,但存在某一结点的右子树就不满足单调。如5/ \2 6/ \1 3输入: [5,2,6,1,3]输出: false先序遍历[5,2,1,3,6]。只有左子树[5,2,1],加入2的右子树变成[5,2,1,3]。因此为了保持栈的单调,元素大于栈顶元素,弹出栈中小于当前结点的值,并把当前节点入栈,变成[5,3],这时栈中又只剩下左子树,满足单调。最后一个弹出栈2的是当前节点3的根节点。
原创
发布博客 2020.12.09 ·
29 阅读 ·
0 点赞 ·
0 评论

计算字符串表达式

整体思路:按照“符号-数字”处理字符串,将+/-运算看作数字的符号不单独运算,因此不需要考虑符号的优先级问题,在遇到非数字符号或者到达字符串结尾时处理上一个“符号-数字”组合。将括号内容看作一个数字,递归处理,遇到“)”表示当前是计算的括号内容,因此直接将结果返回,一定注意共用一个索引,用来跳过括号内容。class Solution {public: int helper(string s, int& i) { int n = s.size(), num = 0; stack<i
原创
发布博客 2020.09.30 ·
114 阅读 ·
0 点赞 ·
0 评论

二分法查找

二分法查找建议使用“左闭右开”的区间形式[left, right)。由于左边是可以取到的,因此在计算中点时使用左边计算方式。int mid = left + (right-left)/2。二分查找一般有两种查找方式:[...,a, tar, tar, tar,.b....]查找目标值的下边界(lower_bound):x>=target,即查找第一个大于等于目标值的元素,图中的第一个tar位置。查找目标值的上边界(upper_bound):x>target,即查找第一个大于目标值的元素
原创
发布博客 2020.05.26 ·
133 阅读 ·
1 点赞 ·
0 评论

并查集原理及应用

并查集树形的数据结构,每个集合有其代表节点,代表节点相同的元素属于同一集合。find:通过查找节点的代表节点,判断节点所属集合。union:合并两集合,小集合合并到大集合,使用大集合的代表节点。class UnionFindSet {private: unordered_map<int, int> fatherMap; unordered_map<int, int> nodesNum;public: UnionFindSet(vector<int> ve
原创
发布博客 2020.05.20 ·
89 阅读 ·
0 点赞 ·
0 评论

c++引用

c++引用包含左值引用和右值引用,因为引用都是变量,因此右值引用是左值。左值指变量,右值指临时对象,字面值(16,“string”,13+2)。当函数参数为T&&时(其中T时模板类型),是万能引用,传入参数是左值,T&&就变成左值引用,否则T&&变成右值引用。template<typename T> void f(T&&a...
原创
发布博客 2019.12.24 ·
74 阅读 ·
0 点赞 ·
0 评论

TrieTree

class TrieTree{public: //定义trie树节点,26个字符是定义在分支上。 struct Node { int across; int end; shared_ptr<Node> nexts[26]; Node() :across(0), end(0) {} }; typedef shared_ptr<Node> Node...
原创
发布博客 2019.12.23 ·
87 阅读 ·
0 点赞 ·
0 评论

图

图的结构定义(邻接表)struct Node{ int id;//节点id,如果节点本身有值还可以加val字段。 bool visit;//是否访问 vector<shared_ptr<Node>> nexts;//从本节点出发的下一个节点,有向无向均可。 Node(int _id) :id(_id), visit(false) {}};struct Edg...
原创
发布博客 2019.12.23 ·
83 阅读 ·
0 点赞 ·
0 评论

哈希表

哈希表又称散列表,存储键值对,主要操作有插入,删除,查找。哈希表底层是一个数组,首先将key通过哈希函数计算哈希值,也即数组下标,然后对位置上的元素执行插入删除,查询。三种操作时间复杂度均为O(1)O(1)O(1),耗时操作在哈希函数计算和哈希冲突的处理上。哈希函数(*)哈希函数的要求是,映射均匀,降低哈希冲突的几率;计算简单,节省时间。直接定址法使用key的线性函数作为哈希函数,H(k...
原创
发布博客 2019.12.21 ·
146 阅读 ·
0 点赞 ·
0 评论

模板相关

一. 编译过程首先介绍C++程序的编译过程。编译器以源文件为编译单元,编译过程分为四个阶段:预处理,编译,汇编,链接。预处理:处理头文件和宏定义。首先根据寻找源文件中所包含的头文件,进入头文件进行宏替换,根据条件编译修改源程序。然后把头文件的内容全部添加到当前原文件里,形成一个中间c文件。编译:对中间的c文件进行语法检查,并将源代码编译成汇编文件。汇编:将汇编翻译成二进制的机器码...
原创
发布博客 2019.12.20 ·
72 阅读 ·
0 点赞 ·
0 评论

c++智能指针以及shared_ptr实现

简化版shared_ptr初始化两种方式:传指针int * a = new int(1);shared_ptr<int> p(a), q(a);//这时两个智能指针对象p,q里的计数无法同步,都是1.//避免这种//尽量使用shared_ptr<int> p(new int(1));make_sharedshared_ptr<int>...
原创
发布博客 2019.12.18 ·
157 阅读 ·
0 点赞 ·
0 评论

top k和第k大元素的问题

堆方法使用容量为k的最小堆,当堆满了以后,加进来的元素和堆顶元素比较,如果大于堆顶元素就先弹一个元素,再加入,否则抛弃。结果最小堆中的元素就是topk元素,堆顶元素是第k大元素。时间复杂度:调整堆O(logk)O(logk)O(logk), n个元素n∗logkn*logkn∗logk。class Solution {public: int findKthLargest(vector&l...
原创
发布博客 2019.12.16 ·
112 阅读 ·
0 点赞 ·
0 评论

区间最大经过次数

给定一组区间,求重叠次数最多的子区间以及重叠次数。样例输入10 31 44 74 9样例输出3 4 4定义结构体(数值,是否为起始端),把输入放入结构体数组。先排序,数值小的在前,相同数值情况下,起始点在前。定义一个计数器,遍历结构体数组,遇到起始端计数加一,遇到结束点计数器减一,并保存最大值。最大值处保存左端点,保存下一个结束点为右端点。struct node { int ...
原创
发布博客 2019.12.13 ·
223 阅读 ·
0 点赞 ·
0 评论

01背包问题及其应用

01背包问题有n个重量为w1,w2,w3…的物品,价值分别为v1,v2,v3…,现有一个容量为C的背包,问在不超过背包容量的条件下,所装物品的最大价值是多少?这个问题有两个变量,分别为物品总数n,背包容量C。记F(n,C)F(n,C)F(n,C)表示n件物品,C容量时的最大价值。考虑最后一步,F(n)F(n)F(n)能通过F(n−1)F(n-1)F(n−1)放与不放当前物品推导出来。不放当前...
原创
发布博客 2019.12.12 ·
393 阅读 ·
0 点赞 ·
0 评论

xmapp+phpwind+agileone.zip

发布资源 2019.12.05 ·
zip
加载更多