C++
爱玩代码的勒勒
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
设计模式--模板方法 Template method
模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是“需求的频繁变化”。设计模式的要点是 “寻找变化点,然后在变化点处应用设计模式,从而来更好地应对 需求的变化”.“什么时候、什么地点应用设计模式”比“理解设 计模式结构本身”更为重要。 重构获得模式:计模式的应用不宜先入为主,一上来就使用设计模式是对设计 模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提 倡的“Refactoring to Patterns”是目前普遍公认的最好的使用设 计模式原创 2021-11-07 16:40:07 · 173 阅读 · 0 评论 -
三角形的最短路径和
这道题使用动态规划求解 1 2 3 4 5 6 dp[i][j]从三角形顶部走到i,j的最短路径和 class Solution { public: int minimumTotal(vector<vector<int>>& triangle) { //i行j列 int m = triangle.size(); vector<vector<int>> dp(m,vector<原创 2021-10-26 11:14:03 · 202 阅读 · 0 评论 -
二分查找 不再硬背(一)
二分查找区间基本问题 之前写二分查找都是硬背,没有体会到区间的概念,在刷题学习之后慢慢有了点感觉 while循环时为什么可以写<也可以写<=号呢? 两者有啥区别呢? 写left<right时可以发现 是取不到right的,表示整个区间是一个左闭右开的区间[left,right: int right = nums.size();//取不到size() 因此我们在写区间时当 nums[mid]>target,则此时应该向左边查找,即right应该移到中间来,那么我们发现既然是取不原创 2021-10-12 11:02:33 · 148 阅读 · 0 评论 -
刷题日记-JZ25合并有序链表
合并有序链表 递归方式合并链表pHead1,pHead2 base case是 pHead1为空或者pHead2为空 递归方式是 如果pHead1->val < pHead2->val 则 pHead1结点作为新链表的头结点,即mergeNode = pHead1; 同时pHead1->next继续向下递归,因为pHead1->next这个节点也有可能小于pHead2 即mergeNode->next = Merge(pHead1->next, pHead2); 否原创 2021-10-01 10:48:39 · 123 阅读 · 0 评论 -
动态规划-股票交易1
动态规划解题 dp[i][k][j] 第i天 k限制交易次数 通过买卖到什么状态(有股票,或者没有股票) 0代表没有股票 有两种可能 前一天本身没有或者是昨天拥有今天卖了 //dp[i][0] = max(dp[i-1][0],dp[i-1][1]+price[i]); dp[0][0] = 0 //dp[i][1] = max(dp[i-1][1],dp[i-1][0]-price[i]);dp[0][1]=-INT_MAX 为了节约数组空间,同...原创 2021-09-29 12:52:33 · 150 阅读 · 0 评论 -
二叉树遍历非递归写法
前序和中序比较简单 使用一个if else即可判断 一直往左走就行了 但是后序比较麻烦,因为最后访问根节点,涉及到一个走过的根节点重新访问 如何知道我是第二次到达根节点访问,而不是节点左右子树还有没有访问过呢? 实际上如果这个节点是第二次到达访问,即左子树肯定已经访问过出栈,不存在了 只有可能右子树是没有访问过了,即我们用一个pre指针,指向已经访问过的上一个节点记录一下就行了,如果p->rightNULL 或 ->rightpre 说明这个点肯定需要访问,因为右子树被访问过了 或者根本没有右子原创 2021-09-28 17:27:12 · 141 阅读 · 0 评论 -
数据流中的中位数
数据流 数据的数量不定,也就是数组的长度不定,可以向数组中插入数字,能够o(1)得到中位数 我们知道使用堆或者快排思想可以得到无需数组中的中位数 如何o(1)得到呢? 使用有序数组,每次插入维持一个有序数组 如果 class MedianFinder { public: /** initialize your data structure here. */ //使用堆 vector<double> max; vector<double> min;原创 2021-09-28 16:07:17 · 159 阅读 · 0 评论 -
刷题日记-替换空格
思路: 扩容 将原来的字符串长度扩大到可以装下替换的之后的长度 1个’ ’ 替换为’%20‘ 即一个空格本身有一个字节,还需2个字节,即m个空格,需要2m长度 即newSize = originSize + 2m; 从后往前 双指针p,q开始赋值 当p>=0 并且 p<q时一直循环处理 class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @原创 2021-09-28 16:01:56 · 134 阅读 · 0 评论 -
刷题日记-二维数组中查找某个目标值
时间复杂度 使用O(M+N) 使用一种比较巧妙的搜索方法: 从右上角开始搜索即x=0,y=n-1,arr[x][y]开始搜索 若arr[x][y]== target 则返回true 若arr[x][y]> target 若target小于当前值,只可能向左,即–y 相反,则向下向更大的值搜索,++x class Solution { public: bool Find(int target, vector<vector<int> > array) {原创 2021-09-27 22:11:14 · 155 阅读 · 0 评论 -
leetcode 剪绳子系列
### 剪绳子一 利用动态规划 状态转移 ### 剪绳子二 绳子长度范围增加,导致结果必须要对1000000007求余,而求余过程导致动态规划失效,因此使用数学推导 class Solution { public: int cuttingRope(int n) { // memo = new int[n+1]; // for(int i=0;i<=n;++i) memo[i] = -1; // return dp(n); ..原创 2021-09-14 09:39:37 · 294 阅读 · 0 评论 -
题解 | #表示数值的字符串#
剑指offer思想,挺简单的思路 使用两个函数 findUnsignedInt() 查找无符号整数(不带正负号) findInt() 查找有符号整数整体数值可以表示为 D[A].[B]e/E[C]D 1. D表示空格,首先去掉起始空格 2. A为开始,可以没有,如果有可以是有符号数或者无符号,因此使用findInt 3. B部分,为小数点后面的部分,必须是无符号整数,小数可以没有整数部分不如".33"(但是此时小数点后面必须有无符号数) ,小数点后面可以没有数字,如"3."(此时前面必须有数字)因此不能是"原创 2021-09-14 09:35:01 · 105 阅读 · 0 评论 -
最大公约数和最小公倍数
最大公约数和最小公倍数 gcd()最大公约数:辗转相除法 递归方法:简单,不用判断a,b大小,因为 如果a<b 调用gcd(b,a%b)==变为gcd(b,a) 迭代,需要判断一下a b大小,若a<b 交换 然后while循环 lcm最小公倍数 lcm(a,b) = a * b / gcd(a,b) int gcd(int a,int b) { if(b==0) return a; return gcd(b,a%b); } //非...原创 2021-09-08 10:41:40 · 131 阅读 · 0 评论 -
为什么析构函数要设置为虚函数?
1.父类析构函数不是虚函数 #include<iostream> using namespace std; class Base{ public: Base() { cout<<"Base()"<<endl; } ~Base() { cout<<"~Base()"<<endl; } virtual void func() { cout原创 2021-09-06 12:28:19 · 302 阅读 · 0 评论
分享