算法与数据结构
EmstanLee
这个作者很懒,什么都没留下…
展开
-
图相关(一)图的邻接矩阵表示(C++)及图的遍历
一.图的邻接矩阵表示法struct graph { vector<vector<int>> cost;//邻接矩阵 vector<string> vertex;//顶点的值,用string较好,节点的名字可以是v1,v2等等};二.图的遍历2.0 图的遍历测试所用到的图:邻接矩阵表示://测试用的图 v...原创 2018-11-01 21:02:59 · 891 阅读 · 0 评论 -
leetcode-206-反转链表1
//方法一:空间复杂度o(N)的方法class Solution {public: ListNode* reverseList(ListNode* head) { if(head==NULL||head->next==NULL) return head; stack<ListNode*> s;//利用堆栈 ...原创 2019-01-22 23:02:40 · 102 阅读 · 0 评论 -
leetcode-297. 二叉树的序列化与反序列化
思路:通过前序、后续、或者层次遍历二叉树,用一个字符串保存节点的值,要注意的是,每个节点的值之后要添加一个特殊符号(比如下划线)分隔,否则可能无法区分节点的值。 比如一个节点的值可能是12,不加下划线的话,反序列化时就分不清楚,12表示的是一个值为12的节点,或者两个节点,其值分别为1,2。split函数用来去除原来作为分割的符号,本文中用来去除下划线。总之:怎么...原创 2019-01-26 20:54:19 · 561 阅读 · 1 评论 -
leetcode-559. N叉树的最大深度(两种解法)-c++
方法一:dfs(类似于求二叉树的高度)class Solution {public: int maxDepth(Node* root) { if(root==NULL) return 0; int max=0; for(int i=0;i<root->children.size();++i){ ...原创 2018-11-19 22:31:14 · 384 阅读 · 0 评论 -
leetcode-515. 在每个树行中找最大值-c++
一开始没有考虑每层中会出现负数的情况,之后把负无穷取为 -0x3f3f3f3f,以为已经足够小了。结果有个测试用例居然是这样的:...... 最后老老实实换成INT_MIN吧。思路:树的层次遍历,也就是图的BFS,更新每层的最大值和节点数即可。/** * Definition for a binary tree node. * struct TreeNode {...原创 2018-11-20 22:24:42 · 168 阅读 · 0 评论 -
leetcode-529-扫雷游戏-c++
思路:点开一个格子时,判断当前格子是不是雷,是雷的话,把该格子改为'X',然后直接返回。若当前格子不是雷,则先统计周围有几个雷,如果旁边一个雷都没有,把当前格子改为'B',并递归的搜索其他八个方向的格子。如果旁边有雷,则把当前格子改为雷的数目,返回。其中的order表示访问次序,用来区分是不是一开始就点到了雷。class Solution {private: void dfs(...原创 2018-11-20 21:54:43 · 462 阅读 · 1 评论 -
leetcode-695-岛屿的最大面积
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,...原创 2018-11-18 22:02:22 · 199 阅读 · 0 评论 -
图相关(四)图的邻接矩阵表示(C++)-拓扑排序
一.测试用图二.拓扑排序void toposort(graph g) {//注意,拓扑排序中要把邻接矩阵中没有边的位置置为0(为了统计入度) size_t N = g.cost.size(); vector<int> InDegree(N, 0);//统计入度,每个顶点的入度初始化为0 for (size_t col = 0;col < N;...原创 2018-11-01 21:41:08 · 717 阅读 · 0 评论 -
图相关(三)图的邻接矩阵表示(C++)及最最小生成树算法(prim和kruskal)
一.测试用图邻接矩阵表示://prim注意是无向图 vector<vector<int>> p(6, vector<int>(6, INF));//类似dijikstra,没有边的点设为INF p[0][1] = 10; p[0][3] = 30; p[0][4] = 45; p[1][0] = 10; ...原创 2018-11-01 21:34:25 · 1050 阅读 · 0 评论 -
图相关(二)图的邻接矩阵表示(C++)及最短路径算法
一.Dijikstra算法注意:计算最短路径时,需要把邻接矩阵中没有边的位置初始化为无穷大;此处以INF表示,INF可以取0x3f3f3f3f,不能直接设为INT_MAX(因为做加法时会上溢)。测试用图:其邻接矩阵表示为:vector<vector<int>> test_graph(7, vector<int>(7, INF)); te...原创 2018-11-01 21:18:50 · 2982 阅读 · 0 评论 -
剑指offer-链表的入环节点
//方法一:使用set,空间复杂度为O(N)class Solution {public: ListNode* EntryNodeOfLoop(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL) return NULL; set<ListNode*>...原创 2019-01-22 23:07:26 · 288 阅读 · 0 评论