- 博客(144)
- 资源 (1)
- 收藏
- 关注
原创 [Leetcode] #32 Longest Valid Parentheses
最近发现Leetcode变化不少,取消了按年份排列,变成了数字序列。另外免费的试题都是网友提供的了,另有10道题需要收费才能做。打开这个题目,发现原来提交的代码运行时间800多ms,应该是算法本身有问题。于是重写了一下,变成300多ms啦。思路是用int left代替栈了,只要知道左括号的个数就行了。当匹配一个右括号后,不仅要看包含的括号个数,还要判断紧挨着的括号是不是完整的。publ
2015-01-03 23:18:00 649
原创 [LeetCode] Next Permutation
题目是“下一个排列”,已知一组数字,可以用来排列组合成若干整数,要求寻找比当前整数大的下一个排列,如果已经是最大值的那个排列,则返回最小的排列思路是寻找一个逆序,然后将后面的数字重新排列。首先从倒数第二的数字开始,在后面寻找比它大的数字,如果找到,交换位置。注意交换位置后,还要把后面的数字排序,这样才能得到紧挨着的那个数字。代码如下:public class Solution {
2014-12-17 20:32:07 634
原创 [LeetCode] Implement strStr()
zheclass Solution {public: char *strStr(char *haystack, char *needle) { if (haystack == NULL || needle == NULL) { return NULL; } char* tempHaystack = haystack; char* tempNeedle = ne
2014-05-18 12:12:07 539
原创 [LeetCode] Remove Element
和上一题类似,好像是数组链表的操作。public class Solution { public int removeElement(int[] A, int elem) { if (A == null || A.length == 0) { return 0; } int count = 0;
2014-05-17 11:47:55 450
原创 [LeetCode] Palindrome Number
要是面试遇到这道题,估计要挂了,想了class Solution {public: bool isPalindrome(int x) { if (x < 0) { return false; } if (x >= 1000000000) { if (x / 100000 % 10 == x % 100000 / 10000) { x = x % 10
2014-04-17 21:45:49 549 1
原创 [LeetCode] String to Integer (atoi)
没有和标准的程序比较,有点choulclass Solution {public: int atoi(const char *str) { int result = 0; int sign = 1; // trim space while (*str == ' ') { ++str; } // get sign if (*str == '-')
2014-04-14 20:29:21 492
原创 [LeetCode] Reverse Integer
class Solution {public: int reverse(int x) { int result = 0; while(x != 0) { result *= 10; result += x % 10; x /= 10; } if (x <
2014-04-13 14:17:32 426
原创 我对C++ Traits编程技法的一点点理解
第一次听说traits是在一次电话面试中,当时还没有听说过这个词。之后查过资料,但也不是十分明白,直到今天重新看了一下《STL源码剖析》,稍微有一些想法。1. traits是模板编程里面的一个编程技法。可能因为不是面向对象的,所以算不上一种设计模式。虽然traits本身一般实现为模板(itrator_traites,以及__type_traits等),但和智能指针(auto_ptr)这种比较大
2014-04-13 01:37:23 2361
原创 [LeetCode] Longest Palindromic Substring
首先英语class Solution {public: string longestPalindrome(string s) { int length = s.size(); char *s1 = new char[length]; char *s2 = new char[length]; for (
2014-04-12 12:07:32 593
原创 [LeetCode] Add Two Numbers
链表的操作,修改了好多次/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:
2014-04-12 12:00:52 404
原创 [LeetCode] Longest Substring Without Repeating Characters
在后面发现重复的字符后,就把前面的
2014-04-12 11:56:00 426
原创 [LeetCode] Median of Two Sorted Arrays
class Solution {public: double findMedianSortedArrays(int A[], int m, int B[], int n) { int C[m + n]; int i = 0, j = 0, index = 0; int mid = (m + n + 1) / 2; while(true) { if (i < m
2014-04-12 11:49:25 423
原创 设计模式学习笔记-Composite
Compoite表示的是“整体-部分”的关系,但不仅仅如此,否则简单的组合就可以完成。这个模式主要是使得用户对单个对象和组合对象的使用具有一致性。 《设计模式》书上举的例子是Graphic-Picture,但我觉得这里用“文件夹-文件”最直观。 文件夹里能包括文件夹和文件, 文件是“Leaf”子类,文件夹是“Composite”类。当需要遍历文件夹的时候,用这样一种“递归”的关系是很优雅的方式。 一般Composite类都包含一个List的容器,其中必有一个函数要递归处理这里面的对象。 我目前理解这
2011-05-12 21:54:00 614
原创 分布式开发的几点基础知识
开发人员要多思考,才能把知识融会贯通。关于分布式的一些概念虽然知道,但都比较零散,今天看《面向模式的软件架构(卷4)》才清楚了一些,总结如下。 技术总是演进的,按照时间顺序来说吧。 20世纪80年代后期和90年代初期,CORBA是典型的“分布式对象计算”中间件,其中“对象”是关键。也许那个时候C++等面向对象编程正火。 20世纪90年代中后期,EJB出现了,被称为“组件”中间件。其中“组件”和“容器”是重要的概念。 后来,又出现了JMS这样的面向“消息”的中间件,但这应该只是同步和异步上的设计问题,
2011-05-11 23:36:00 931
原创 C++ CLI 如何打开并读取文件
相关链接: http://msdn.microsoft.com/en-us/library/61097ykx.aspx 环境:Microsoft Visual C++ 2010 Express 步骤: 1. 从Toolbox里拖拽一个OpenFileDialog出来,到Form1.h[Design]下面的一个工具条上,应该变成openFileDialog1 2. 在menuStrip1里添加一个菜单,比如Open,双击一下Open会自动产生一个方法 3. 在方法里面添加红色的代码: priva
2011-05-11 10:40:00 3164
原创 设计模式学习笔记-Abstract Factory
这是23个设计模式的第一个,因此按照惯例,第一章第一节总会被看很多次。 但是我在实际工作中并没有遇到这个模式,也许是因为太麻烦的原因。 有“工厂”就有“产品”,所以这个模式里面主要是Factory和Product两种类,一般Factory和Product都会有自己的继承结构,即需要定义抽象基类和具体的实现类。 其实“工厂”只是在client和product之间加入了一层解耦合的类。而且client使用的可以是基类的指针或引用,可以充分利用多态的好处。 总之,这个模式并没有太多的技巧在里面,也许是因为
2011-05-08 22:50:00 602 1
原创 设计模式学习笔记-Singleton
这个应该是比较简单的一个设计模式,也是我接触的第一个模式。要点是构造函数声明为私有,定义一个指向自己的静态指针,在合适的时候new一个对象。简单的代码如下: 1: class Singleton { 2: public: 3: static Singleton* instance() 4: { 5: if (_instance == NULL)
2011-05-07 15:01:00 506
原创 C++指针比较的含义
这个问题我是在《C++必知必会》条款28里面看到的。C++指针比较的不是地址,而是对象同一性问题。即指针地址可以不同,而比较的结果却相同,因为它们指向的是同一个对象。这个问题用多重继承比较直观: 1: #include 2: 3: using namespace std; 4: 5: class A { 6: int a;
2011-05-01 19:59:00 1195
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人