C++Primer —— 一本牛逼的书 作为一个精神脆弱的人,学习Primer之前可能会被800多页的厚书压垮,翻不动书;本文将以习题的形式来总览全书,主要记录一些C++语法坑点的相关习题,希望能让读者明白这本书的大致内容和优秀伟大之处,然后制定自己的读书计划。推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,练习 2.15:下面的哪个定义是不合法的?请指出下面的名字中哪些是非法的?
左神算法学习日记——子数组问题,约瑟夫问题,正则表达式 算法学习了一段时间了,算法题有数学题,有找规律的题像第二个子数组题和约瑟夫问题,有递归动态规划这种猛找所有可能性的题,不过所有题都必须扣清楚边界,不然就有可能出错,算法题考逻辑思维,考细致性,我差远了。一个数组中全是正数,求子数组和等于aim的最长子数组长度int maxlen(vector<int> arr,int aim){ int i = 0; int j = 0;...
左神算法学习日记——动态规划进阶 给定一个数组,通过给数组中每一个数一个整数倍的值,求和为aim的所有可能性。int recMonnum(vector<int>& arr, int index, int aim){ if (index == arr.size())//当aim被减为0时,说明当前策略符合要求 return (aim == 0 ? 1 : 0); int res = 0; for ...
左神算法学习日记——子数组最大异或和 求子数组最大异或和,要求时间复杂度为O(n)class Node{public: Node() { next[0] = NULL; next[1] = NULL; } //构造之前所有异或和的前缀树 void addnum(int num) { Node* trytree = this; for (int i = 31; i >= 0; i--)//应该...
左神算法学习日记——计算表达式结果 写代码过程中应该把代码意义写出来,理清思路,发现边界条件。void calelem(deque<string>& que,int pre)//这个部分一直出错,因为没有考虑清楚pre是第一个字符和之前字符是加减号时该怎么处理,这时应该直接放入队列{ if (!que.empty()) { string temp = que.back(); if (temp...
左神算法学习日记——LFU(最近最少被使用) 一个能够使set和get操作的时间复杂度为O(1),敲代码都需要事先将所有可能性考虑清楚,然后是扣清楚队列的边界,以防出错。template<class K, class V>class Node{public: K key; V value; int time;//为了能够判断该节点是否被经常使用 Node<K, V>* up;//为了实现时间复杂...
左神算法学习日记——LRU数据结构设计 template <typename K, typename V>class Node{public: K key; V value; Node<K, V>* next; Node<K, V>* last; Node() = default; Node(K k, V v) { key = k; value = v; next =...
左神算法学习日记——树dp 树dp问题只需要考虑每个结点的所有孩子的情况就可以解决class Node{public: int num; Node* left; Node* right; Node() = default; Node(int n) { num = n; } ~Node() { queue<Node*> del; Node* temp; del.push...
左神算法学习日记——搜索二叉树使用方法 class edge{public: int positon; int height; bool ifup; edge() = default; edge(int p, int h, bool dir) { positon = p; height = h; ifup = dir; }};//给定一堆楼的位置参数与其高度即[startpositoon,endpos...
左神算法学习日记——morrish #include "stdafx.h"#include<algorithm>#include<numeric>#include<iostream>#include<set>#include<vector>#include<map>#include<stack>#include<queue...
左神算法学习日记——单调栈 单调栈,一种可以找到左右边界的数据结构//利用单调栈找到一个数的左边最近的比他小的数(左边界)和右边最近的比他小的数(右边界)int maxhist(vector<int> hist){ stack<int> max; int res = INT_MIN; for (int i = 0; i < hist.size(); i++) { //栈从...
左神算法学习日记——窗口 一个可以找出窗口中最大/小值的数据结构vector<int> maxval(vector<int> mat,int w){ vector<int> res(mat.size()-w+1); deque<int> q;//用双端队列来表示窗口,队头元素永远是规定窗口中的最大值 for (int i = 0; i < mat.siz...
左神算法学习日记——manacha 一个时间复杂度为O(n)的求字符串最长回文长度的算法string manacha(string s){ string res(2 * s.size() + 1, '#'); int j = 0; for (int i = 0; i < res.size(); i++) { if ((i & 1) == 1) res[i] = s[j++]; } ret...
左神算法学习日记——桶排序的应用 给定一个数组, 求如果排序之后, 相邻两数的最大差值, 要求时间复杂度O(N), 且要求不能用非基于比较的排序。int bucket(int num, long max, long min, int len){ return ((num-min)*len / (max - min));//将len个数均匀的分到len+1个桶中}int bigdif(vector<lon...
左神算法学习日记——递归和动态规划 #include<iostream>#include<string>#include<vector>#include<map>#include<stack>#include<queue>#include<algorithm>#include<xfunctional>#include&l...
左神算法学习日记——图 图的各种基础算法head.h#include<iostream>#include<string>#include<vector>#include<map>#include<set>#include<unordered_map>#include<unordered_set>#include&l...