- 博客(16)
- 资源 (38)
- 收藏
- 关注
原创 算法设计之动态规划练习之解决分割整数求最大积
题目示意:分析:解答源码:class solution{public: int max3(int a, int b, int c) { return max(a, max(b, c)); } std::vector<int> mem; int get1(int x) { if (x == 1) { return 1; } if (x == 2) { return 1; } if (x == 3) { retur
2021-02-28 14:52:21 116
原创 算法设计之使用动态规划解决菲波那切数列
//记忆化搜索int fib(int n){ static vector<int> m_memory = vector<int>(n + 1, -1); if (n == 0 || n == 1) { return 1; } if (m_memory[n] == -1) { m_memory[n] = fib(n - 1) + fib(n - 2); } return m_memory[n];}//普通的递归-----原始的解法int fib2
2021-02-27 22:26:03 150
原创 stl算法之merge
有些场景中,我们需要将 2 个有序序列合并为 1 个有序序列,这时就可以借助 merge() 或者 inplace_merge() 函数实现。值得一提的是,merge() 和 inplace_merge() 函数都定义在头文件中,因此在使用它们之前,程序中必须提前引入该头文件:#include <algorithm>merge() 函数用于将 2 个有序序列合并为 1 个有序序列,前提是这 2 个有序序列的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序序列,其
2021-02-24 21:31:47 853
原创 stl算法之sort 02
对于“排序”这个计算机科学里的经典问题,你是绝对没有必要自己写 for 循环的,必须坚决地选择标准算法。在求职面试的时候,你也许手写过不少排序算法吧,像选择排序、插入排序、冒泡排序,等等,但标准库里的算法绝对要比你所能写出的任何实现都要好。说到排序,你脑海里跳出的第一个词可能就是 sort(),它是经典的快排算法,通常用它准没错。使用方法可以参考我的另一篇文章stl算法之sort 01不过,排序也有多种不同的应用场景,sort() 虽然快,但它是不稳定的,而且是全排所有元素。很多时候,这样做的成本比较
2021-02-24 11:10:21 198
原创 stl算法之sort 01
list和forward_list有成员sort()函数set/map自动排序array,vector,deque用全局sort()代码示例:void main(){ list<int> m_list{ 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 }; cout << "m_list从大到小:"; m_list.sort([](int x, int y){return x > y; });//从大到小 for (auto node :m_li
2021-02-23 16:50:54 116
原创 stl算法之replace,replace_if,replace_copy,replace_copy_if
1.replace自己实现源码template<typename iteratorty,typename type>void replace_ty(iteratorty first, iteratorty last, const type & oldvalue, const type & newvalue){ for (; first != last;first++) { if (*first == oldvalue) { //将所有等于oldvalue
2021-02-23 16:08:35 210
原创 stl算法之自己实现foreach函数
template<typename T,typename function>void for_each_ty(T first, T last, function f){ for (; first != last;first++) { f(*first); }}void main(){ std::vector<int> m_vc{ 1, 2, 3, 4, 5, 6 }; for_each_ty(m_vc.begin(), m_vc.end(), [](int
2021-02-23 14:14:48 126
原创 stl算法之accumulate
首先包含#include<numeric>然后看看代码:1.先看看累加void main(){ //1.默认累加 std::vector<int> a(100000, 1); a[2] = 2; a[3] = 2; a[4] = 3; clock_t t1 = clock(); int nsum = accumulate(begin(a), end(a), 0);//0 +1+2+3+4+5+6+7+0+0+0+0... clock_t t2 =
2021-02-23 11:34:14 152
原创 c++基础之模板的全特化、偏特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。1.类模板template<typename T1,typename T2>class Jack{private: T1 a; T2 b;public: Jack(T1 x, T2 y) :a(x), b(y) { cout <
2021-02-22 23:41:12 133
原创 算法设计之如何优雅的实现门禁访问码
其实也是利用了数学里的排列组合的知识,下面看看代码吧。算法思想是采用了回溯法。class doorsolution{public: vector<vector<int>> m_resVc; void fun1(int nstart,int n,vector<int> &p,int k) { if (p.size() == k) { m_resVc.push_back(p); return; } for (int i = ns
2021-02-21 22:51:37 222
原创 算法设计之回溯法解答排列组合问题
回溯法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用深度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。class pailiezuhe{public: //将要返回的最终结果 std::vector<vector<int>> m_resVc; //记录元素有没有被使用 std::vector<bool> usedVc; void fun1(vector<int> perms, int nindex,vec
2021-02-20 22:33:57 397
原创 算法设计之实现九宫格英文输出
实现九宫格字符串的输入比如Input: "23"Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].接下里实现代码代码:char *lettersmap[] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };class TyKeyboard{ //将来要返回的所有字符组合 vector<string> res
2021-02-08 17:22:16 664
原创 算法设计之求第一次不重复的字符
题目:代码:int getPos(string str){ int a[26] = { 0 }; for (int i = 0; i < str.length();i++) { a[str.at(i) - 'a']++; } for (int i = 0; i < str.length(); i++) { if (a[str.at(i) - 'a'] == 1) { return i; } } return -1;}int main()
2021-02-04 23:03:10 73
原创 STL-12-unordermap和map的不同
需要引入的头文件不同map: #include < map >unordered_map: #include < unordered_map >内部实现机理不同 map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对
2021-02-03 20:57:08 557
原创 STL-11-set
1.关于set首先,set是关联容器,set作为一个容器是用来存储同一种数据类型的数据结构,基本功能与数组相似。不同的是,在set中每个元素的值都是唯一的。而且系统能够根据元素的值自动进行排序。但是set中数元素的值并不能直接被改变。除了set,STL中还有一些标准关联容器multiset、map和multimap等,这些关联容器内部均是采用红黑树实现的。set具有以下特性:(1)map和set的插入删除效率比其他序列容器高,这是因为:set中所有元素都是以节点的方式来存储的,其节点结构和链表类似
2021-02-02 22:29:23 145
原创 STL-10-map
map的使用map1、map简介2、map的功能3、使用map4、map的构造函数5、数据的插入和遍历6、map的查找7、从map中删除元素8、排序-map中的sort问题9、map的基本操作函数:map map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,
2021-02-01 23:36:42 173
mysql+connetcot.txt
2019-12-29
30岁的程序员如何防脱
2023-10-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人