- 博客(23)
- 收藏
- 关注
原创 Bellman-Ford算法
问题: 假设一张图中总共有n个节点,编号0 ~ n - 1, 计算K节点到所有其他节点的最短距离初始化: vector<int> dist(n, INT_MAX)边:vector<\vector<int>> edges;邻接表:vector<\vector<int>> adj;for (int i = 0; i < n; i...
2020-01-22 16:29:33 103
原创 leetcode787 K站中转内最便宜的航班
方案一: Bellman-Ford DP源节点src, 目的节点v经过中间站个数为kdp[k][v]表示最多经过k个中间站到达v所需要的最少花费, 那么dp[k][v] = min{dp[k - 1][v], dp[k - 1][u[ + w[u][v]},u属于[0, n - 1]方案二: 新定义节点结构体,结构体中字段有节点编号、节点所处深度、及到达该节点的花费bfs在存在环的...
2020-01-22 16:00:27 353
原创 leetcode526“优美的排列”-经典回溯问题总结
题目描述:假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第 i 位的数字能被 i 整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?1、不定义新的节点结构体只用一个stack<int&...
2020-01-22 11:56:46 191
原创 leetcode907 所有连续子数组中最小值之和
ex. A = [3 1 2 6 4]对于原始数组A中下标为k的元素,从k往左寻找,至第一个小于A[k]的元素出现,下标记为i:如果下标i不存在,那么sum[k] = A[k] * (k + 1);如果下标i存在,那么sum[k] = sum[i] + (k - i) * A[k];其中,sum[k]表示所有以A[k]结尾的连续子数组最小值和。那么,问题来了: 对于任意的k,如何快速找到...
2020-01-20 14:50:19 400
原创 C++ getline函数切割字符串
class Solution {public: string simplifyPath(string path) { stringstream is(path); vector<string> strs; string res = "", tmp = ""; while(getline(is, tmp, '/')...
2020-01-19 15:34:27 923
原创 Dijkstra算法和Floyd算法
D算法可分为4个步骤:1、初始化节点;2、寻找dist[i]中最小值对应的节点minIdx;3、更新所有与节点minIdx相邻的节点经过它中转时的路径信息;4、更新已访问过的所有节点经过minIdx中转时的路径信息;...
2020-01-16 17:49:38 157
原创 leetcode97 子数组最小值之和
/*class Solution{ public: using myType = pair<int, int>; struct cmp { bool operator()(const myType& m1, const myType& m2) const { return m1.second > m2.second; } ...
2020-01-15 18:09:29 106
原创 leetcode983"最低票价问题"解法分析
力友解法一:整体往后移动30天,避免天数判断,简化代码class Solution {public: int mincostTickets(vector<int>& days, vector<int>& costs) { int dp[400] = {}; int a = costs[0], b = costs[1...
2020-01-15 09:28:31 207
原创 C++ 二分查找的三个函数
vector<int> sum;auto it = low_bound(sum.begin(), sum.end(), to_find);// 返回的是迭代器指针,第一个出现的位置upper_bound() // 最后一个出现的位置binary_search() // 返回bool型INT_MAX...
2020-01-14 14:59:56 369
原创 leetcode131 dp+回溯+vector代替stack
题目:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。class Solution {public: vector<vector<string>> partition(string s) { vector< vector<int> > dp = isPalindr...
2020-01-14 11:08:30 156
原创 C++类使用规范
1. 只有基类析构函数是virtual,通过多态调用的时候才能保证派生类的析构函数被调用。2. 对于单淡出的构造函数是要求explict声明,避免触发隐式转换。3. 对于不会修改成员变量的成员函数使用const修饰void func () const { };4. 在重写虚函数时请使用override关键字,避免子类函数与积累函数原型不一致;void func () override {...
2020-01-11 11:08:26 219
转载 map/set删除元素几种方式
删除键为bfff指向的元素cmap.erase(“bfff”);删除迭代器 key所指向的元素map<string,int>::iterator key = cmap.find(“mykey”);if(key!=cmap.end()){cmap.erase(key);}删除所有元素cmap.erase(cmap.begin(),cmap.end());删除map中指...
2020-01-10 14:07:31 1116
原创 函数对象
很多STL算法都使用函数对象-也叫函数符(functor)class A { double operator() (double x) { return 0; };}A a;double val = a(1.0);重载()运算将使得能够像函数那样使用类对象...
2020-01-09 11:03:36 62
原创 C++ 容器
序列容器deque支持随机访问list模板类表示双向链表list在链表中任一位置进行插入和删除的时间都是固定的。list不支持数组表示法和随机访问。list成员函数:void merge(list<T, Alloc> &x)void remove(const T& val)void sort() // 快速插入的代价是放弃随机访问功能,所以不能将非成员函...
2020-01-09 10:57:39 103 1
原创 C++11函数包装器
C++提供了多个包装器(wrapper,也叫适配器(adapter)),包括bind、men_fn、reference_wrapper及包装器function(仿函数)。这里主要讲包装器function。主要为了解决模板的低效性。answer = ef(q);ef是什么呢?可以是函数名、函数指针、函数对象、或有名称的lambda表达式,所有这些都是可调用类型。template<t...
2020-01-08 18:19:35 484
原创 C++11 lambda表达式能带来哪些好处?
先预习下"函数符"概念:class f_mode {pritvate:int dv;public:bool operator() (int x) {return x % dv == 0;}};cout_if(numbers.begin(), numbers.end(), f_mod(3));cout_if(numbers.begin(), numbers.end(), f_mod(...
2020-01-08 17:36:45 6055 1
原创 c++11右值引用--为了实现移动语义和完美转发
/*右值引用解决两大问题:移动语义和完美转发 */#include <iostream>#include <vector>#include <memory>using namespace std;class obj {public: obj() { cout << " 1 " << end...
2020-01-08 17:04:49 196
原创 GDB调试
1 转到帧命令(结合bt)frame n – 转到第n层调用栈2 结束子函数,返回到调用函数finish3 结束循环命令until4 set(gdb) set $i=“hello”(gdb) ptype $itype = char [6]set var a = 35 call事先准备好函数入参6 info local打印所有局部变量7 list -n查看前n行代码...
2020-01-08 11:50:00 131
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人