摘要: 很简单,稍微观察一下就可以得出规律:每次买入之后在最高的时候卖出,只需用low和high来记录买入、卖出的价格,遇到更高价格的时候更新high,否则卖出,然后同时更新low和high。结束之后最后一次的收入=high - low不要忘了加进去! 1 class Solution { 2 public: 3 int maxProfit(vector &prices) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 if... 阅读全文
posted @ 2013-08-31 22:33 Exio 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 可以转化成图的题目,bfs,代码可以写得很短! 1 class Solution { 2 public: 3 int ladderLength(string start, string end, unordered_set &dict) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 deque > nodes; 7 nodes.push_back(pair(start, 1)); 8 ... 阅读全文
posted @ 2013-08-31 21:58 Exio 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 同水题,哎,今天无心做难题,只好刷刷水题。还心不在焉地把i、j打错了,错了好几次,哭,完全没有达到做题的状态! 1 class Solution { 2 public: 3 string addBinary(string a, string b) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 int n1 = a.size(); 7 int n2 = b.size(); 8 if (... 阅读全文
posted @ 2013-08-29 23:19 Exio 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 找自信刷数目的水题。题目没看清,看出只是字母了,贡献了一次WA!必须认真看清题目呀~~~ 1 class Solution { 2 public: 3 bool isPalindrome(string s) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 if (s.size() == 0) 7 return true; 8 int i = 0; 9 int j =... 阅读全文
posted @ 2013-08-29 21:37 Exio 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 没有难度的题目,纯用来练习链表操作和递归的使用的,难得的一次就能ac大小数据呀! 1 class Solution { 2 public: 3 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 ListNode *res = add(l1, l2, false); 7 return res; 8 ... 阅读全文
posted @ 2013-08-27 01:09 Exio 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 哎,又是做失败的一题,果然遇到这种需要清晰的头脑把问题用最简单的方法描述解答出来的题目就会很悲剧,写代码之前没有把问题用很简化的解法想清楚,写出来的bug不断,需要把最大路径和与节点的最大路径和分开来考虑!另外也印证了一条定理:那就是面试的题目如果代码写得超过50行,就要停下来仔细思考一下了,因为很可能是由于误入歧途了,再在原有的思路上继续非常可能是白白浪费时间!哎,泪奔~ 1 class Solution { 2 public: 3 int res; 4 int getMax(TreeNode *node) { 5 if (node == NULL) { 6 ... 阅读全文
posted @ 2013-08-26 23:48 Exio 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 哎,这题又不会做,想了好久,还是想不出来,最长连续的数的长度,首先想到的肯定是排序,O(nlogn),不过题目要求是O(n),于是又想到用hash的思想,类似数组记数的方式,不过即便不考虑存的空间的话,因为给定的数的大小并不在一定的范围之内,所以最后的时间复杂度会是O(max - min),max是最大的数,min是最小的数,还是不满足题目的要求。其实思考一下题目,所谓连续的数,只需要记录一段连续的数的最小的数和最大的数即可,当时也想到了这个,不过下意识的想法是用数组来存每个数所在的连续段,这样每个数还是都要往回查找是否可以扩展前面某个连续段,感觉复杂度是O(n2)了,所以放弃了这个想法。做不 阅读全文
posted @ 2013-08-25 23:56 Exio 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 基本可以算是树的层级遍历,很简单,一次就过了小数据和大数据;因为返回的是int,所以也不用考虑溢出的问题,直接逐层更新节点的数值,遇到叶子节点则加入到sum中,遍历结束之后返回sum即可。 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 */... 阅读全文
posted @ 2013-08-24 23:58 Exio 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 哎,做得比较郁闷的一道题,如果面试做这一题的话,肯定就跪了,一开始的时候思路就错了,只想着怎样把“O"变成"X",解的过程是遇到了"O"了再去判断,以dfs的方式遍历它四周的点,判断是否被"X"包围,如果被包围的话则改成"O"。只能过小数据,大数据会在一个超长的输入那里出现Runtime Error。后来到网上看了一下,发现正确的思路应该是用dfs或者bfs从外面一圈判断是否可连接到外面的”O",因为如果最外面一圈如果都是"X"的话,那么肯定是被包围的,所有的”O“都要被改成 阅读全文
posted @ 2013-08-24 22:31 Exio 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 题目看起来很简单,很容易想到直接排序后二分查找,时间复杂度是O(nlogn),不过要找出的是两个数在原数组中的索引,而不是这两个数本身,所以必须记录每个数原来的位置,可能有人会想到用map,由于可能有相同数值的两个数,所以map是不行的。那就用包含数和位置的struct吧,其实不用那么麻烦,直接用一个包含pair的数组就可以了,不过注意sort的比较函数要定义到class的外部,否则调用的时候找不到函数,或者定义为类的static成员函数也是可以的。 1 bool compare(pair a, pair b) { 2 return a.first twoSum(vector &nu. 阅读全文
posted @ 2013-08-23 00:48 Exio 阅读(236) 评论(0) 推荐(0) 编辑