随笔分类 - leetcode
摘要:题目: Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 题意: 不用乘号、除号、取模运算来模拟除法。 分析: 一开始每回减去一次除数,这样会超时,优化是减去除数*2^n,用左移运算可以实现每次翻2倍. c...
阅读全文
摘要:思路1: class Solution {
public:
// 两个指针,p, q, q指向第二个,preP是p之前 ListNode *swapPairs(ListNode *head) { if(head == NULL) return NULL; auto p = head; auto q = head->next; ...
阅读全文
摘要:题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 题意: 将k个已排好序的链表合并为一个非下降排序的链表。 思路: 将每个链表的表头元素取出来,建立一个小顶堆,因为k个链表中都排好序了,因此每次取堆顶的元素就是k个链表中的最小...
阅读全文
摘要:Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such tha...
阅读全文
摘要:题目:Implement regular expression matching with support for '.' and '*'.'.' Matches any single character.'*' Matches zero or more of the preceding eleme...
阅读全文
摘要:题目:Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 大意是:从所给的字符串s中找出其...
阅读全文
摘要:思路:将两段最大的利润相加,一段的最大利润不一定只在一个上升期内,例如在绿线间就有两个上升区间 只要算出i之前的最大利润和i之后的最大利润相加就行,因为i不可能同时是峰值或者谷值,所以能保证不是在同一天买进和卖出 绿线的利润加上红线利润是最大利润。 class Solution { // 算出利润最大的两段 // 算出i之前最大的利润和i之后最大的利...
阅读全文
摘要:遍历价格vector,把每段上升期间的利润加起来,注意最后结束时记得再计算最后一次的利润 class Solution { // 把每段上升期间的利润加起来 // minVal: 低谷值 // maxVal: 峰值 // profit: 利润
public: int maxProfit(vector &prices) { ...
阅读全文
摘要:只有每次看这个图的时候才觉得c++没有白学啊~~~平常用vs的时候都各种怀念eclipse,各种怀念java~~~ 这题算的是最大利润,原先我想的是找到最小值和最大值,之差不就是最大利润了么,后来想想,最小值可能在最大值之后,不能说在3号买进了回去1号卖出股票哈~然后想,记录某天之前的最小值,再记录那天之后的最大值,这么一算就能算出在某段时间内的最大利润了,再比一比好几段时间内的利润,...
阅读全文
摘要:这题很难,主要是我没理解题目的意思,后来看着给的测试参考,和网上找的答案,终于理解了。 例如: 给的 正确的路线应该是 也就是说,路径是一条的,不是有分叉的,之所以算出55是因为把>0的数都加上去了,这样路径就分叉了,就不是一条路径了,所以用dfs做时,返回值应该是左子树或者右子树中>0且比较大的那个子树的路径的值加上当前根节点的值。 我的是参考网上答案的代码: /...
阅读全文
摘要:这题算是简单,但是还是有错到我都不知道为啥错要启动编译器来调试的时候,原来是不知道有个判断字母的函数是isalnum(),于是自己写了个判断字母的函数,第一次没判断数字,就错了,第二次发现发现判断字母时我是判断A~z则是字母,但是A和a之间隔了32个字符,而大写字母只有26个,说明之间还有不是字母的字符也被我判断进去了。。。。怪不得以前看别人的程序判断字母时都是判断A~Z || a~z,原...
阅读全文
摘要:想了一晚上没想明白,上网搜了别人的答案。。。研究了好几个晚上才觉得有点明悟了。。。 下面是详细思考的过程:(参考答案) class Solution {
public: // 用桶排序 // 算出相邻两个桶之间的最大差值 // 如果是平均分布,则桶的数目和元素的数目相同时,其排序的时间复杂度是0(n) // 我们假设桶的个数和元素的数目相同,若是平...
阅读全文
摘要:好多天没写leetcode了,就是卡在这题上,然后各种偷懒。。。。之前思路一直没理顺,想了两个晚上,就放弃了,后来就去看答案去了。。。可是答案没有注释,有点看不太懂,后来只好上网查了,有的说用到trie树,就去看了trie树是啥。。。反正那段时间状态不好,总不想看,偶尔还被跑男吸引注意力,总之各种...
阅读全文
摘要:又写完了一道,好开心,洗澡睡觉去~~~明天再看答案好了~ 时间只要花在了// 进行下一次前,先将上次加入palindrome的string删掉 if(!palindrome.empty()) palindrome.erase(palindrome.end()-1);这句话的位置上,应该是当加入一次...
阅读全文
摘要:果然用了map记录key和value之后代码量少了很多,出错几率也变少了,不到一个小时就写完了~~~上完代码继续做下一题! class Solution {
private: unordered_map umap;
public:
// 用DFS
// 用map来存储,key是旧的结点地址,value是新的结点地址
// 第一遍,如果没有访问过,就clone并加入...
阅读全文
摘要:自从中午饿得被迫起来吃完了一个午饭之后,就开始做这道题。鉴于之前做过一道Copy List with Random Pointer的题,看了大神的答案之后比自己想的快,就借鉴了那个思想,原先我的想法是用map的key记录原结点的引用,将新建结点的引用存入value,鉴于大神是将copy的结点接在原...
阅读全文