摘要:
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)

浙公网安备 33010602011771号