C++
wx_14678
一代人终将老去,但总有人正年轻
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从最小(大)栈到最大(小)队列,再到单调队列
引言很长一段时间没有写博客,也没有刷 leetcode 了。这两天又刷了一下,发现还是生疏了不少。做 239. 滑动窗口最大值 的时候,发现有用单调队列的做法,突然想起了 剑指 Offer 59 - II. 队列的最大值 可不就是单调队列嘛。所以和最大(小)栈问题一起,做个总结记录以备查看。最小栈问题简单说明一下最小栈问题:设计一个栈结构,可以支持栈原有的push, pop,top 操作,同时加入 min 操作可以返回当前栈的最小值。问题分析: 原本栈是一个单进单出的结构,先进后出。要求返回栈的最小原创 2020-07-18 22:47:47 · 407 阅读 · 1 评论 -
C++单分派和双分派问题
分派说的是根据对象的类型和参数类型来确定最终调用的实际函数,体现出来也就是多态性。C++多态一般分为两种,一种是静态多态,也就是通过重载(同名不同参)以及通过模板的实现;另一种就是动态多态,也称运行时多态,通过虚函数的继承与重写来实现的。单分派:也就是只能同时进行一种方式的分派,也即要么就是通过重载实现静态多态,要么就是通过虚函数继承实现运行时多态。具体化表现就是:只能根据对象的动态类型以及参数的静态类型,来确定实际调用函数。双分派:也就是可以在支持静态多态的基础上再进行动态多态。可以根据对象的动态原创 2020-05-30 16:13:26 · 803 阅读 · 0 评论 -
STL源码阅读——set 源码阅读
前言最近刷题有用到set, 于是突然来了兴致,就想了解 STL 中set 的实现。说起set,立刻就能想到的有几点,set 底层用红黑树实现,set 是天然有序的,set 可以去重(不包含重复元素,当然 multiset 可以)。然而还是想对 set 的实现做个了解,比如到底是怎么插入删除的?侯捷大佬的 《STL源码剖析》很不错,菜鸡本鸡没有好好看。带着侯捷大佬的名言“源码面前无秘密”,看了一下 set 的源码,做个简单记录。主要关注set 的插入删除数据,至于红黑树的实现,就不深究了。不同C++版本.原创 2020-05-30 23:07:28 · 924 阅读 · 2 评论 -
谈谈C++构造函数和析构函数那些事儿
1. 基础概念构造函数:在C++对象创建的时候,自动调用,一般用于对象的初始化。没有返回类型,函数名与类名一致。析构函数:用于在程序结束时自动销毁对象,也可显式调用销毁。没有返回类型,没有参数,函数名为 ~ + 类名C++中,构造函数和析构函数在每一个类中都有缺省实现,所以不定义构造函数和析构函数,也是可以正常运行的。2. 构造函数的重载:构造函数可以分为带参数和不带参数两种...原创 2020-04-06 22:10:44 · 477 阅读 · 0 评论 -
leetcode题集: 72. 编辑距离
题目大意:给定两个字符串,求解将 word1 转化成 word2 的最小操作。操作有三个,替换,增加和删除。题目分析:突然给定一个这样的题目,求解有效可能集合中的最优解。第一想法当然就想到了动态规划,可是怎么找状态转移方程呢?又应该选择哪个状态呢?一般能想到两个,一个是dp[i][j], 表示长度为 i 的Word1 转化为长度为 j 的word2所需要的最小操作数;另一个就是用一维...原创 2020-04-06 15:31:37 · 134 阅读 · 0 评论 -
2020腾讯实习生招聘面试算法题
主要是从同学这打听到的,于是自己也写了一下。第一道就是叫手写一个堆排序,第二道是写幂,第三道链表反转。堆排序堆排序其实就是叫建堆嘛,最大堆和最小堆,之前也写过,具体见 堆和堆排序。这次写的时候写成了模板,想着要好点。#include <iostream>#include <algorithm>using namespace std;// 两个比较仿函...原创 2020-03-27 12:03:43 · 1062 阅读 · 0 评论 -
leetcode题集: 面试题 01.06. 字符串压缩
leetcode中文最近出的每日一题活动,一道简答题,但是却让我提交了好几次,而且错了好几次。 故此记录一下题目分析:字符串压缩, 没啥特别的意义。就是字母加数字的方法,很常见。要求,如果压缩之后的字符串比原来的没有变短,那就返回原来的字符串,否则返回压缩之后的字符串。题目意思很清楚,很明了,那就直接开始上代码了,很快可以写出来:class Solution {public:...原创 2020-03-16 23:36:28 · 268 阅读 · 0 评论 -
leetcode题集: 45. Jump Game II
题目大意:就是给定一个非负数组,求到最后一个的最小跳数。每次跳动范围不超过当前索引的数值。举个栗子,当前在0号位置,最多只能跳到+2,也就是2号位置。题目分析:第一感觉,就是个动态规划嘛。很快动态转移方程:dp[j] = min(dp[j], dp[i]+1) ,i = 0....j。于是很快写出了以下代码:class Solution {public: int jump(...原创 2020-03-05 12:35:26 · 193 阅读 · 0 评论 -
leetcode题集: 44. Wildcard Matching
题目大意:简化版的正则表达式匹配,给定一个待匹配字符串和一个pattern字符串,返回pattern字符串是否能匹配。特殊匹配符号有两个,'*' 和 '?'。题目分析:首先看两个特殊符号的表示范围'?': 所有单个字符;(一个坑,这里单个字符不包括空,提交次数+1)'*': 任意字符序列,可以是空序列考虑使用递归来解决这个问题。匹配过程分为几种情况来讨论:1) s 匹配...原创 2020-03-04 23:11:21 · 183 阅读 · 0 评论 -
leetcode题集: 41. First Missing Positive
题目大意:给定一个乱序的整型数组,找出最小的缺失的正整数。简单来说,就是找出数组中没有的最小正整数题目分析:题目的难点在于他的要求,要求O(n)时间和常量空间。这下就直接把排序(时间复杂度不满足)和额外数组打表(空间复杂度不满足)两个方法给排除了,这是我第一反应能想到的两个方法。简单解释一下打表:常用的空间换时间方法,即用一个数组记录,数组位置上的元素放的就是 位置的值,也即 a[i] ...原创 2020-03-04 12:01:11 · 173 阅读 · 0 评论 -
leetcode题集: 32. Longest Valid Parentheses
题目大意:求最长有效括号的长度。此前有个简单的题,就是求所给字符串括号是否匹配,这个题的话所给的字符串并非都是有效的括号匹配。题目分析:看这个题首先需要知道有效括号的几种情况。一种呢,就是串联并列的括号,eg. "()()()()()()"; 二是括号嵌套的情况,eg. "(((())))";那么第三种呢就是两种的结合了,既有并列又有嵌套,"()((()()))"首先嵌套...原创 2020-03-03 11:47:59 · 163 阅读 · 0 评论 -
leetcode题集: 29. Divide Two Integers
一道看起来比较简单的问题,但是提交了好几次才提交上去,不是超时就是某些边界问题考虑不全面。题目大意:整数除法。要求不要乘除和模运算等。特别说明:除数和被除数都是32位有符号整数;除数不会为0(不用自己考虑了);第三点(之前没注意):溢出则返回最大整数题目分析:题目读下来,还是大致清楚的。那么既然不能用乘除和模运算,那只能采用减法了吧。但是由于正负数边界问题,修改了几次;而且说明...原创 2020-02-27 13:47:19 · 309 阅读 · 0 评论 -
leetcode题集: 37. Sudoku Solver
37.Sudoku Solver之前说到那个数独的有效性检测,并不是要求解,而是简单的做个判断,这道题就是数独的求解。题目大意:数独求解。假定每次的样例有且仅有一个唯一解题目分析:看到这个问题,第一反应就是使用递归来解决。递归步骤可以分为:1)空格寻找 。 2)有效数字寻找(即一行,一列,一个3x3单元格中每个数字都只能出现一次)递归终止条件:空格检查完了最后一个空格...原创 2020-02-26 20:21:25 · 155 阅读 · 0 评论 -
leetcode题集: 36. Valid Sudoku
第15题:36.Valid Sudoku题目大意:检查数独是否有效;即每行,每列和每个3x3小格子是否存在重复的数字。注意要点:1. 数独有效并不等同于有解(开始以为是要解出数独,还以为难度有点大)2. 只有提到的单元需要进行规则检测,也即是row,col和3x3 box需要做这些检测3. 所给字符只会有数组1-9和 '.'4. 边界大小9x9题目分析:题目...原创 2020-01-30 17:22:51 · 203 阅读 · 0 评论 -
C++虚函数与纯虚函数
C++的虚函数与纯虚函数C++项目看起来真的是太恼火了,源码阅读起来有点不便,幸亏有source insight 保命。C++有个很重要的特性,那就是多态。多态的实现主要是两种方式:一个就是函数的重载,另一个就是继承中对虚函数的重写。虚函数的引入对C++大型项目接口设计统一标准起到了非常重要的作用,与虚函数相对应的就是纯虚函数。虚函数:用 virtual 标识标记的函数就是虚函数,只含有虚...原创 2020-01-05 22:54:08 · 614 阅读 · 0 评论 -
C++ 类的public,protected, private继承
很长一段时间没有写过C++的类了,写多了Java发现不太会写C++了。我们知道,C++有三种访问类型,分别是public,protected和private。成员函数和成员变量面向对象具有封装性。所谓封装是类外部而言,类成员函数之间没有访问限制。为了达到封装的效果,有些成员变量,类是不需要暴露给外部的。于是有了 public 变量(或函数) 和 private 变量(或函数),public...原创 2019-12-31 16:40:00 · 390 阅读 · 0 评论 -
树的旋转和AVL树
AVL树是一种自平衡二叉搜索树,由. M. Adelson-Velsky和E. M. Landis,在他们1962年的论文《An algorithm for the organization of information》中发表。名声很大,就算自己没写过,也应该都听说过。这两天也是重新看了一下,记录一些理解。1. AVL树简介AVL树首先是一个二叉搜索树,然后AVL树中任何两个子树的高度差...原创 2019-11-30 21:54:46 · 398 阅读 · 1 评论 -
未初始化局部变量问题与编译器优化
本文针对C/C++语言,不知道其他语言的是否会一样。首先开一个超大(爆栈)数组,int[40000000000],代码如下:#include <iostream>using namespace std;int main(){ // 下列取消注释,都是单个操作,控制变量 int a[4000000000]; // 只这样定义一个数组...原创 2019-11-26 11:28:42 · 1840 阅读 · 0 评论 -
leetcode题集: 28. Implement strStr()
第14题:28. Implement strStr()题目大意:给出两个字符串,求解待匹配串在主串中的位置,如果不是主串的一个子串,则返回-1;如果待匹配串为空的话,则返回0;这与C 中的strsstr()函数一致。题目分析:一个字符串匹配的求解。第一个印象就是想到了KMP算法,字符串匹配。但是抱着试一试的心理,也用暴力法做了一个求解。暴力法求解:直接莽,看代码:clas...原创 2019-11-18 11:13:58 · 177 阅读 · 0 评论 -
KMP算法和字符串匹配
KMP算法是一个很经典的字符串匹配算法,以前只在算法课上写过作业,现在想起来,发现还是不会写了。所以再次温习记录一下。字符串匹配我们考虑如果不用KMP算法的话,暴力法做字符串匹配,简单写一下就是一个二重循环的写法,也就是,复杂度是相当高的。int n_strStr(string str1, string str2) // 在str1 中匹配 str2 字符串{ int...原创 2019-11-18 10:45:20 · 241 阅读 · 0 评论 -
leetcode题集:343. Integer Break
第11题:343.Integer Break怎么说呢,水题一时爽,一直水题一直爽。题目大意:给定一个正整数,使他等于至少两个数之和,并求这些加数的最大积。题目分析:题目意思很清楚,就是求给定和的加数的最大积。动态转移方程:,其中。直接上代码:class Solution {public: int integerBreak(int n) { if(n=...原创 2019-10-26 12:20:00 · 182 阅读 · 0 评论 -
leetcode题集: 357. Count Numbers with Unique Digits
第10题:357.Count Numbers with Unique Digits题目大意:求给定位数的不包含重复数字的整数。。。不用说了,超级大水题,就是一个排列组合,简单的数学题 。题目分析:求出当前位数非重复的整数数量,非要说动态规划,那就是加起了之前低位数的。(ps: 我不是为了凑题数,手动狗头)。直接上代码好了:class Solution {public: ...原创 2019-10-26 11:11:05 · 161 阅读 · 0 评论 -
leetcode题集: 322. Coin Change
实在是太懒了,写博客真的懒得写。今天就一起写几篇动态规划的好了第9题:322.Coin Change题目大意:就是换零钱!给出可换的零钱种类,求最后换得零钱的最小张数(coin的个数),每种可换的零钱数目无限。题目分析:思路很明确,就是找零钱从最大的开始找呗,依次找当前可换的最大数额的零钱,显然可以用动态规划的思想解决,是一个很简单的动态规划问题,状态转移方程: ...原创 2019-10-26 10:54:36 · 216 阅读 · 0 评论 -
leetcode题集: 5. Longest Palindromic Substring
第四天:5.Longest Palindromic Substring这一阵子有点子忙,就没有做题了,今天想起很久没做又做了下。题目大意:求最长回文子序列,可能有多个,输出一个即可。题目分析:初看到这个题,就想起了以前做过的一道最长回文子序列的题目,动态规划的方法解决。然而测试的时候发现了问题,这个题目要求的子序列是连续的,所以就差别于之前做的最长回文子序列问题。最后考虑到这个字...原创 2019-04-16 22:13:55 · 131 阅读 · 0 评论 -
leetcode题集:561. Array Partition I
第二天:561.Array Partition I一道水题,给定2n个数的数组,求n对二元组的最小值之和的最大值,分析发现,只需对数组进行一个从小到大的排序,取n=0,2,4,6....2n-2即是所求之和的最大值。完整代码如下:class Solution {public: int arrayPairSum(vector<int>& nums) {...原创 2019-03-19 22:16:49 · 198 阅读 · 0 评论 -
leetcode题集:299. Bulls and Cows
第三天:299. Bulls and Cows题目大意就是两个字符串,一个秘密字符串,一个猜测字符串,然后比较这两个字符串。如果数字和位置都对应上,则是A类型;如果只是数字对上,位置对不上,则是B类型,问AB类型各有多少。如果重复的是一对多,则只算一个。题目分析:A类型好求,就是一个循环完事儿了。B类型需要比较两个字符串中相同数字的个数,考虑到每一位都是数字,即数字类型是有限个数,即0...原创 2019-03-20 22:15:06 · 317 阅读 · 0 评论 -
leetcode题集: 8. String to Integer (atoi)
第五题:8.String to Integer (atoi)题目大意:写一个字符串转有符号整数的函数,实现字符串到数的转换。题目分析:问题不难,主要是题目的要求要读清楚,还有看测试用测(我没看测试用例,导致漏了两条,提交了4次才上。菜得很真实)题目要求:1. 空字符串和第一个字符为非法字符(除去数字和'+' '-')的,函数不做处理,默认返回0;2. 字符串中有非法字...原创 2019-04-16 22:38:47 · 222 阅读 · 0 评论 -
C++常用格式输出
常用的格式输出,经常忘记C++的输出, 几个主要点:设置输出位数,设置填充,设置对齐#include <iostream>#include <iomanip>using namespace std;int main(){ // 位数输出 int n = 10; cout <<"0: " <<setw(4) <...原创 2019-05-10 10:42:38 · 754 阅读 · 0 评论 -
leetcode题集: 306. Additive Number
第6题:306. Additive Number题目大意:给定一串字符串,判断该字符串是否能够切分成多个个子字符串,使得前两个子串对应数字之和等于后一个子串对应数字之和,类似斐波拉契数列。题目分析:题目的意思很明显了,就是要看清楚题目的要求(又是因为要求没看清楚,所以提交了4 5次才提交上去,菜是原罪)。主要要求总结如下:1. 基本要求,后一个数字是前两个数字之和,第1 2个数字...原创 2019-05-27 16:24:25 · 170 阅读 · 0 评论 -
leetcode题集: 134. Gas Station
第7题:134.Gas Station题目大意:就是给定个数的加油站、站点的油储量、站点之间的耗油量,油箱不限,问从哪个站点出发可以走完全程。题目分析:问题比较简单,油箱容量不限,所以问题就在于站点油量可否能够供给带下一个站点。即从第一个满足要求的站点出发,遍历,如果能够顺利走完则满足要求;否则,继续寻找下一个满足要求的初始站点,有则返回。直至搜索完毕。给出完整代码如下:...原创 2019-06-07 16:01:04 · 180 阅读 · 0 评论 -
单向链表的反转
链表的反转是一个面试的经典题目,今天做LeetCode题目时,遇到一道题,突然想起,做一下记录。问题分析:我们知道链表通过头指针以及next指针组成,要做到链表的反转,则需要改变各指针的next指针,使他们指向前面一个指针。即是需要实现如下图的过程,可知,每一次反转指向中会出现两次的“断链”,因为链表之间是通过next指针来联系,“断链”意味着无法找打其他的节点。所以需要额外的辅助指针进行节点...原创 2019-07-20 15:32:13 · 151 阅读 · 0 评论 -
leetcode题集: 2. Add Two Numbers
第8题:2.Add Two Numbers题目大意:给定两个非空链表表示两个非负的整数,然后数字存储是反转顺序存储的(如例子中给出的342,存储为2->4->3,不用自己反转了。。。),每个节点只存储单个数字(0-9),相加返回结果。题目明确指出不会有前导0。问题分析:反转都帮我们做了,那就直接加就完事儿了。数据结构由题目代码给出。具体完整代码如下:/** * D...原创 2019-07-20 15:56:51 · 224 阅读 · 0 评论 -
常量指针和指针常量
网上很多帖子常说的 常量指针和指针常量,傻傻分不清。。。中文太难理解,而且网上有两种不同的说法。比如pointer to const (指向常量的指针) 到底是叫常量指针还是指针常量,关于const pointer 和 pointer to const 的用法都是对的,但是名称却是有不一致,这就导致产生了很多误解,为后面的理解涂添加不便。于是翻看了英文的定义:pointer to const ...原创 2018-04-16 21:23:43 · 199 阅读 · 0 评论
分享