摘要: java技术体系:1.java程序设计语言2.硬件平台上的java虚拟机3.class文件格式4.java的API类库5.第三方的类库JDK: java语言,虚拟机,java API类库JRE: java SE中API子集,java虚拟机java发展新方向:1.模块化2.混合语言3.多核4.新语言特性5.64位 阅读全文
posted @ 2013-11-28 16:06 Exio 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 智能指针模板类的实现,主要有几个关键点,首先是如何实现不同对象的引用记数,才能保证当引用记数增减之后可以,所有对象的引用记数都同步增减;所以不能简单的用一个unsigned成员,因为每个对象中成员的值会各不相同,用一个unsigned指针就可以了,当初始化时从堆中动态分配一个unsigned,另外,再做了赋值操作和析构操作之后要检查引用记数是否变为0。 1 tempate class SmartPointer { 2 public: 3 SmartPointer(T *ptr) { 4 ref = ptr; 5 ref_c... 阅读全文
posted @ 2013-11-03 20:25 Exio 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 1.当m n时就比较麻烦一点,基本思路还是和第一种情况是一样的,问题是怎样才能利用randn()生成大于n个随机数呢?randn2 = n * (randn() - 1) + randn()可以生成1~n2之间的数,那么只要想办法生成1-A的数,A >= m,即可,randn3 = n * (randn2() - 1) + randn2();这样就可以得到randnk 生成1-A的数,A = nk,然后再按照第一步的方法即可生成1-m的随机数了! 1 //m m) { 5 x = randn(); 6 } 7 return x; 8 } 9 10 // m ... 阅读全文
posted @ 2013-11-03 19:50 Exio 阅读(651) 评论(0) 推荐(1) 编辑
摘要: 1 string longestPalinderome(string s) { 2 int N = s.size(); 3 int id = 0, mx = 0; 4 vector dp(2 * N + 1); 5 for (int i = 0; i i) { 8 dp[i] = min(mx - i, dp[j]); 9 }10 int left = i - dp[i], right = i + dp[i];11 for (; left >= 0 && right mx) {19 ... 阅读全文
posted @ 2013-10-13 23:47 Exio 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 二叉树的遍历:先序,中序,后序;二叉树的遍历有三种常见的方法,最简单的实现就是递归调用,另外就是飞递归的迭代调用,最后还有O(1)空间的morris遍历;二叉树的结构定义:1 struct TreeNode {2 int val;3 TreeNode *left;4 TreeNode *right;5 TreeNode(int x) : val(x), left(NULL), right(NULL) {}6 };1.先序遍历:递归:1 void preOrderRecursive(TreeNode *root) {2 if (!root)3 ... 阅读全文
posted @ 2013-09-29 12:16 Exio 阅读(2139) 评论(1) 推荐(1) 编辑
摘要: 树的遍历,递归: 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 isSymmetric(TreeNode *root) {13 // St... 阅读全文
posted @ 2013-09-20 13:53 Exio 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 编辑距离,很常见的题目,貌似去年google笔试就考了这道题,典型的DP,dp[i][j]表示word2[i]到word1[j]的最小编辑距离;当word2[i]与word1[j]不相同时有三种方式:1.改变字符,dp[i][j] = dp[i - 1][j- 1] + 1;2.插入字符,dp[i][j] = dp[i ][j - 1] + 1;3.删除字符,dp[i][j] = dp[i - 1][j] + 1;故dp[i][j] = min(1,2,3);当word2[i]与word1[j]相同时:dp[i][j] = dp[i - 1][j - 1]; 1 class Solution 阅读全文
posted @ 2013-09-20 13:04 Exio 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 看清问题,用DP就可以了,之前我首先想到的是图的搜索,实际上在这里并不适用;必须遍历每个点,计算它的最大矩阵,遍历的顺序为从左上角到右下角,x, y表示左边的最大长度,y表示上面的最大长度,然后计算每个点的最大面积; 1 class Solution { 2 public: 3 int maximalRectangle(vector > &matrix) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 int res... 阅读全文
posted @ 2013-09-20 10:02 Exio 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 又是这种需要仔细考虑的题目,很容易就会漏掉一些情况,哎,感冒了,完全不在状态,调了好几个小时,写代码的能力实在是不行,总感觉写出来的代码不够优雅, 1 class Solution { 2 public: 3 int trap(int A[], int n) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 int res = 0; 7 if (A == NULL) { 8 re... 阅读全文
posted @ 2013-09-20 01:00 Exio 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 判断合法数字,之前好像在哪里看到过这题,记得当时还写了好久,反正各种改,今天看到了大神的解法(https://github.com/fuwutu/LeetCode/blob/master/Valid%20Number.cpp),用有限状态机,非常简洁,不需要复杂的各种判断!先枚举一下各种合法的输入情况:1.空格+ 数字 +空格2.空格+ 点 + 数字 +空格3.空格+ 符号 + 数字 + 空格4.空格 + 符号 + 点 + 数字 +空格5.空格 + (1, 2, 3, 4) + e + (1, 2, 3, 4) +空格组后合法的字符可以是:1.数字2.空格有限状态机的状态转移过程:起始为0:  阅读全文
posted @ 2013-09-19 20:04 Exio 阅读(1737) 评论(0) 推荐(0) 编辑