摘要: //对于数字#include<iostream>#include<string>#include<vector>using namespace std;#define MAX 8#define RADIX 10#define MAX_SPACE 10000struct Node{ string data; int next; Node():next(0){};};struct list{ Node r[MAX_SPACE]; int keynum; int recnum; list():keynum(0),recnum(0){};};void Distrib 阅读全文
posted @ 2013-06-17 21:24 NinaGood 阅读(233) 评论(0) 推荐(0) 编辑
摘要: class Solution {public: int lengthOfLastWord(const char *s) { // Start typing your C/C++ solution below // DO NOT write int main() function int count=0;int i=0; int ret= 0; while( s[i] != '\0') { if(s[i] == ' ' ) { if( count... 阅读全文
posted @ 2013-06-06 10:45 NinaGood 阅读(100) 评论(0) 推荐(0) 编辑
摘要: /** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ bool cmp( const Interval & a, const Interval & b ) { return a.start < b.start; } class Solution { pu... 阅读全文
posted @ 2013-06-06 10:12 NinaGood 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 同时遍历两个树; 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */10 class Solution {11 public:12 bool isSameTree(TreeNode *p, TreeNode *q) {13 // Start typing your C/C++ solut 阅读全文
posted @ 2013-05-30 17:18 NinaGood 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 动态规划实现:1.每个点走的方向只有两个方向,向下和向右。相对应的每个点来说,到这个点的路径最多有两种,从上方和从左方。2.对于每个点求出两种可能路径的最短路径,再加上本点的值,就是等于从开始点到此点的最短路径。其中,对于坐标[0][j]这样的点只考虑左方,对于坐标[i][0]的点只考虑上方;3.最后填满二维数组,则也求出了到[m-1][n-1]点的最短路径。m表示行,n表示列 class Solution {public: int minPathSum(vector<vector<int> > &grid) { // Start typing your C/C 阅读全文
posted @ 2013-05-30 16:21 NinaGood 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 最多两次交易,如果分成两个时间段的话,即把数组分成两段。分别求出两段的最大利润,最后相加,从而得到最大利润。那怎么分两段呢?假设t来表示所分的分点,t= 1,2,....n-1 (n是数组长度)。用一维数组来记录 i=0 到 t 段 中的 最大利润值。上边求出来的只是第一段的最大利润值,为了求出第二段的最大利润值,逆向遍历数组。与第一段的方法相同求出第二段的最大利润值。最后求出,第一段最大利润值和第二段最大利润值和中的最大值就是我们要求出的最大利润值。class Solution {public: int maxProfit(vector<int> &prices) { / 阅读全文
posted @ 2013-05-29 20:56 NinaGood 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 题目要求可以多次买卖,但是同一时间只能有一股在手里。 这样就可以在每次上升子序列之前买入,在上升子序列结束的时候卖出。相当于能够获得所有的上升子序列的收益。而且,对于一个上升子序列,比如:5,1,2,3,4,0 中的1,2,3,4序列来说,对于两种操作方案:一,在1买入,4卖出;二,在1买入,2卖出同时买入,3卖出同时买入,4卖出;这两种操作下,收益是一样的。所以算法就是:从头到尾扫描prices,如果i比i-1大,那么price[i] – price[i-1]就可以计入最后的收益中。这样扫描一次O(n)就可以获得最大收益了。class Solution {public: int m... 阅读全文
posted @ 2013-05-28 09:53 NinaGood 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 从前往后,用当前价格减去此前最低价格,就是在当前点卖出股票能获得的最高利润。扫描的过程中更新最大利润和最低价格就行了。O(n)大数据48ms 过class Solution {public: int maxProfit(vector<int> &prices) { // Start typing your C/C++ solution below // DO NOT write int main() function int min=0x7fffffff; int max= 0; for( int i ... 阅读全文
posted @ 2013-05-28 09:08 NinaGood 阅读(94) 评论(0) 推荐(0) 编辑
摘要: /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void preorder(TreeNode *t, int & max,int & sum) { if(t==NULL) { return ; ... 阅读全文
posted @ 2013-05-25 10:57 NinaGood 阅读(89) 评论(0) 推荐(0) 编辑
摘要: /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ #include<queue> struct Node{ int num; TreeNode * v; Node(int x =1,TreeNode * root=NULL):num(x),v(root){ } };... 阅读全文
posted @ 2013-05-24 21:28 NinaGood 阅读(96) 评论(0) 推荐(0) 编辑