上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 43 下一页
摘要: http://www.itint5.com/oj/#13要注意,一是空路径也可以,所以最小是0。然后要时刻注意路径顶多有两条子路径+根节点组成,所以更新全局最值时和返回上一级的值要注意分清。#include using namespace std;int maxPathHelper(TreeNode *root, int &max) { if (root == NULL) { return 0; } int root_val = root->val; // root it self int max1 = 0; int max2 = 0; for... 阅读全文
posted @ 2014-01-19 17:14 阿牧遥 阅读(260) 评论(0) 推荐(0)
摘要: 要注意dp[0][0]要初始化为1。int totalPath(vector > &blocked) { int m = blocked.size(); if (m == 0) return 0; int n = blocked[0].size(); if (n == 0) return 0; vector > dp(m); for (int i = 0; i = 0) dp[i][j] += dp[i-1][j]; if (j-1 >= 0) dp[i][j] += dp[i][j-1]; } ... 阅读全文
posted @ 2014-01-19 16:43 阿牧遥 阅读(187) 评论(0) 推荐(0)
摘要: 这一题也简单,唯一有意思的地方是提炼了一个函数用来做数组索引去重前进。int forward(vector &arr, int i) { while (i+1 arrayUnion(vector &a, vector &b) { vector ans; int i = 0; int j = 0; while (i arrayIntersect(vector &a, vector &b) { vector ans; int i = 0; int j = 0; while (i < a.size() && j < b.size() 阅读全文
posted @ 2014-01-19 15:48 阿牧遥 阅读(187) 评论(0) 推荐(0)
摘要: http://www.itint5.com/oj/#20其实是3sum的变种,有重复数字,但是一开始还是写错了。其实是选定一个后,在右边剩余数组里找2sum,找到一组后继续找。#include using namespace std;typedef tuple ABC; //存放a,b,c三元组//返回所有满足条件的(a,b,c)三元组vector threeSumZero(vector &arr) { vector ans; sort(arr.begin(), arr.end()); int k = 0; while (k = 0 && arr[j-1] == arr 阅读全文
posted @ 2014-01-19 15:35 阿牧遥 阅读(192) 评论(0) 推荐(0)
摘要: http://www.itint5.com/oj/#6首先,试验的时候要拿5个来试,3,4个都太少了。好久没做所以方法也忘了,是先从后往前找到第一个不合顺序的,然后在后面找到比这个大的最小的来交换,再把后面排序。#include #include #include using namespace std;bool next_permutation(vector &arr) { bool has_next = false; int size = arr.size(); int i = arr.size() - 1; while (i - 1 >= 0) { ... 阅读全文
posted @ 2014-01-19 14:04 阿牧遥 阅读(166) 评论(0) 推荐(0)
摘要: merge sort,leet code里面曾经做过。但一开始没这么写,遍历来做,效率n*k了,用了merge sort后,变成logn*k。用了dummy node。同时要注意size为0的情况。#include /*链表结点的定义(请不要在代码中定义该类型)struct ListNode { int val; ListNode *next;};*///lists包含k个链表的头结点,返回合并后链表头结点ListNode* merge(vector &lists) { if (lists.size() == 0) return NULL; int k = 1; whil... 阅读全文
posted @ 2014-01-19 12:02 阿牧遥 阅读(346) 评论(0) 推荐(0)
摘要: http://www.itint5.com/oj/#10拓扑排序。首先按照题目给出的数据结构复杂度不会是O(v+e)的,所以先要变换数据结构。二来写的时候用一个stack会更好点。还有就是题目里其实ID就是1到n。#include #include #include #include using namespace std;typedef int JobID;/* * deps[id]表示任务id所依赖的任务 * 如果存在合法的任务完成序列,返回true,否则返回false * 合法的任务序列请存放在参数result中(已经分配空间,不需要push_back) */ /* id are ... 阅读全文
posted @ 2014-01-18 12:52 阿牧遥 阅读(313) 评论(0) 推荐(0)
摘要: http://www.itint5.com/oj/#9一开始有了个n*n的算法,就是把原来的数组*2,由环形的展开成数组。然后调用n次最大子段和的方法。超时。后来看到个O(n)的算法,就是如果不跨越末尾,就是最大字段和;如果跨越末尾,就是sum-(最小子段和)http://blog.csdn.net/hackbuteer1/article/details/6694193int maxConsSum2(const vector &arr) { if (arr.size() == 0) return 0; int dp = 0; int max1 = 0; for (int... 阅读全文
posted @ 2014-01-16 21:59 阿牧遥 阅读(517) 评论(0) 推荐(0)
摘要: http://www.itint5.com/oj/#14要记录原来的索引,所以用了额外的空间,新生成一个结构。如果要省空间,可以用指针来排序,最后拿指针减去索引0的位置就是index,见:http://www.itint5.com/discuss/172/%E4%B8%BA%E5%95%A5%E6%88%91%E8%BF%99%E9%A2%98%E5%9C%A8%E5%A4%A7%E6%95%B0%E6%8D%AE%E6%97%B6%E4%BC%9Asegmentation-fault这里没有用指针,也有很多错误,足可见面试时不要自取其辱,寻找合理的方法即可。一要注意,sort和comp函数, 阅读全文
posted @ 2014-01-16 17:44 阿牧遥 阅读(275) 评论(0) 推荐(0)
摘要: http://www.itint5.com/oj/#4这题是利用完全二叉树的性质计算节点数目。那么是通过比较左右子树的最左结点的高度来看那边是满的,然后递归计算。//使用getLeftChildNode(TreeNode)获得左儿子结点//使用getRightChildNode(TreeNode)获得右儿子结点//使用isNullNode(TreeNode)判断结点是否为空int get_left_height(TreeNode root) { if (isNullNode(root)) { return 0; } else { return get_l... 阅读全文
posted @ 2014-01-16 00:02 阿牧遥 阅读(397) 评论(0) 推荐(0)
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 43 下一页