自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 LeetCode 140:单词拆分 Ⅱ

每次求解子串s的解集时,单独定义一个ans看上去可读性更好,但是试了一下不用ans直接更新mem_,反而速度更快!(我的程序写法更简洁,比huahua的程序简洁一些)class Solution {public: vector<string> wordBreak(string s, vector<string>& wordDict) { ...

2019-10-26 11:39:39 105

原创 LeetCode 139:单词拆分

方法一:循环递推的方式class Solution {public: bool wordBreak(string s, vector<string>& wordDict) { unordered_set<string> dict(wordDict.cbegin(), wordDict.cend()); int n =...

2019-10-25 23:28:45 97

原创 LeetCode 70:爬楼梯

这道题可以说是动态规划里最最基础的题目了,剑指Offer中的青蛙跳台阶也是这样的题目。循环的写法:class Solution {public: int climbStairs(int n) { vector<int> f(n); //数组记录爬到每一级台阶的方法数 if(n==1) return 1; f[0] ...

2019-10-24 21:58:21 207

原创 LeetCode 704:二分查找

标准的二分查找:一开始循环条件没有加等号在有些case是错的,加等号就可以,而且另一句针对单个元素的数组的检查也可以省掉了。做这道题主要是看到了知乎上关于二分查找的讨论:使用这个模板编写二分查找法的一般流程:https://zhuanlan.zhihu.com/p/86136802二分查找有几种写法?它们的区别是什么?:https://www.zhihu.com/question/3...

2019-10-23 22:28:27 83

原创 LeetCode 122:买卖股票的最佳时间Ⅱ

方法一:贪心算法,只要第二天比前一天高,就前一天买入,第二天卖出 int maxProfit(vector<int>& prices) { const int n = prices.size(); //if(n<=1) return 0; int profit = 0; for(int i=1...

2019-10-21 22:51:18 126

原创 LeetCode 121:买卖股票的最佳时间

动态规划可解: 状态方程 + 初始状态,为了更直观的体现状态机,可以把到第 i 天为止的最小价格和到第 i 天能获得的最大收益保存为数组,当然完全可以保存为一个变量的。时间复杂度O(n),空间复杂度O(n)/O(1) int maxProfit(vector<int>& prices) { const int n = prices.size(); ...

2019-10-21 21:30:06 128

原创 LeetCode 141:环形链表

方法一:利用链表类问题中最常用的快慢指针方法(2t-(p-1))%q == (t-(p-1))%q,这种情况下会判定有环。注意:在fast->next为null时,必须在else中将它也置为null,否则链表长度为偶数时跳不出循环,最后一定会返回true!class Solution {public: bool hasCycle(ListNode *head) { ...

2019-10-18 23:30:26 84

原创 LeetCode 725:分割链表

链表中比较常规的一道题:取整,取余,双指针的应用自己写的代码,有些长,但是运行4ms结束,超过100%class Solution {public: vector<ListNode*> splitListToParts(ListNode* root, int k) { vector<ListNode*> ans(k, nullptr);...

2019-10-18 22:48:23 103

原创 LeetCode 146:LRU缓存机制(设计数据结构)

1、关键点:map 和 list 要进行同步的更新,不能遗漏对map的操作2、list容器的splice函数合并两个list合理使用可以加快 list 中节点顺序的调整list::splice()函数:https://blog.csdn.net/qjh5606/article/details/858816803、push_front() 与 emplace_front() 的区别:...

2019-10-15 22:05:47 183

原创 LeetCode:432 全O(1)的数据结构

思路:1、时间复杂度要求O(1),由key查询value操作必须用 hash table2、getMax, getMin 操作要实现O(1)的复杂度,必须要用有序的 list/vector3、inc, dec操作要实现O(1)的复杂度,必须要用有序的 list实现方法:hash table:key为string,映射为list的迭代器list:每一个节点内容:value ...

2019-10-15 15:29:06 366

原创 LeetCode 817:链表组件(计数)

解法一:常规解法,建图+DFS,时间复杂度O(n)+O(n),空间复杂度因为需要存储图,所以是O(n)这种方法是通解,对于所有图都适用。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : ...

2019-10-11 17:28:05 184

原创 LeetCode 148:排序链表

方法一:采用归并排序 (merge sort),Top-down形式 (递归) 的归并排序。一开始写程序没有自己思考,犯了两处很明显的逻辑错误。之后可以顺利通过。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * List...

2019-10-10 23:46:47 54

原创 LeetCode 23:合并K个链表

解法一:用最小堆新的知识点:1、在定义priority_queue时,用 auto 和 decltype 搭配实现:泛型编程中decltype结合auto,用于追踪函数的返回值类型 (注意分号的使用,以及 q 后面加 q(cmp) )2、C++11中的特性,Lambda表达式: auto cmp = [](ListNode* a, ListNode* b) {retur...

2019-10-08 23:43:10 120

原创 LeetCode 21: 合并两个排序链表

链表节点的结构体定义 :/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */第一种解法:(原来刷剑指Offer时用的方法)...

2019-10-08 23:19:27 72

原创 剑指Offer:48 不用加减乘除做加法

三步走:1、不考虑进位的加法:异或2、单独考虑进位的结果:位与,然后左移一位3、将前两个结果加和,加和的方法还是一样:重复1-2两步骤做循环。直到没有进位产生。class Solution {public: int Add(int num1, int num2) { int sum; int carry = 1; //随便一个初...

2019-10-07 18:44:21 85

原创 剑指Offer: 46 约瑟夫环问题

因为对STL中的 list 容器和 iterator 迭代器的使用不熟悉,花了很多时间现补知识。最开始的代码会报段错误,如果把 iter++ 放在erase里面就不会报段错误,但还是会返回错误的结果。 int LastRemaining_Solution(int n, int m) { if(n<=0 || m<=0) return -1; ...

2019-10-07 16:30:53 124

原创 剑指Offer:45 扑克牌中的顺子

第一种思路:1、先排序2、统计0的个数,检查有没有其他重复的数 3、看缺的牌数是不是小于等于0的个数class Solution {public: bool IsContinuous( vector<int> numbers ) { if(numbers.size()!=5) return false; //1、排序 s...

2019-10-07 12:45:35 81

原创 剑指Offer:44翻转单词顺序(翻转字符串)

和43题类似,也是翻转字符串,写完程序有4处Bug,最大的两个错误在于:1、写Reserve函数时不动脑子,把end--写成了end++,导致数组越界,段错误(检查了很久都没检查出来)2、 又一次忘记了将 指针/索引 在用完后移动:每翻转完一次,begin指向end指的空格,end需要往后错一位,不然end一直满足<str.size() 且 !=‘ ’ ,陷入外层的死循环3、忘记...

2019-10-06 22:40:20 87

原创 剑指Offer:43 左旋转字符串

对字符串的操作还不太熟悉,其实字符串就是char字符的数组,以‘\0’结束左旋转字符串,是翻转字符串的变形,思路类似:都是先整体翻转,再分段再翻转回来。class Solution {public: string LeftRotateString(string str, int n) { if(str.size()<=1) return str; ...

2019-10-06 20:49:39 83

原创 剑指Offer:42 和为S的两个数字

和41题类似,但是更简单一些,直接双指针法就可以。要求返回乘积最小的一组,其实就是第一组,因为和一定时,两数相差越大积越小;或者可以在所有结果找完之后,for循环找乘积最小的一组。class Solution {public: vector<int> FindNumbersWithSum(vector<int> array,int sum) { ...

2019-10-06 18:31:30 72

原创 剑指Offer:41 和为S的连续正数序列

双指针法,指针均单向移动,求和:内存超限:您的程序使用了超过限制的内存,case通过率为0.00%class Solution {public: vector<vector<int> > FindContinuousSequence(int sum) { vector<vector<int>> result; ...

2019-10-06 18:16:55 116

原创 剑指Offer:40 数组中只出现一次的数字

位运算的典型题目,利用好两个相同的数字异或为0,任何数字和0异或都为原数字这两个性质即可。思路:全部异或,以为1的位为标准,按照0/1将其分为两组,这两组中各包含一个只出现一次的值,其他出现两次的同一个数字一定被分到同一组。然后两组分别异或即可。class Solution {public: void FindNumsAppearOnce(vector<int> d...

2019-10-06 17:52:19 59

原创 剑指Offer:55 二叉树的深度/判断平衡二叉树

平衡二叉树,就是左子树深度和右子树深度差最多为1,沿用上一题38题的判断树的深度的代码,就可以AC但是其实代码是错误的,因为:只是判断了根节点的左右子树深度差,而平衡二叉树要求任意节点的左右子树高度差不超过1class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot=...

2019-10-06 17:24:19 111

原创 剑指Offer:38 二叉树的深度

一开始想用层序遍历的方法做,写完了层序遍历的函数 (很久没做二叉树了有点生疏),才发现这样求出来的depth是整棵树的节点个数,而不是深度。 int LevelOrderTraversal(TreeNode* pRoot) { int depth = 0; queue<TreeNode*> Queue; Queue.p...

2019-10-06 10:57:03 67

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除