- 博客(26)
- 收藏
- 关注
原创 c/c++岗面试卡壳问题总结
一.define与typedef的区别昨天在面试的时候,面试官的其中一个问题是:陈述typedef与define的区别。我有点小蒙,这两者虽然经常遇见并且使用,但确实很少去研究过它们的区别。我回答了一些它们在使用上的差别,但总体并不令人满意,因此想在这里把它们的用法进行总结。1.define我对define的认知起源于第一堂C语言课程。它属于编译预处理中的“宏定义”。一言以蔽之,编译器...
2018-09-07 14:49:54
408
原创 二叉树的三种遍历方法的非递归实现(c++版)
二叉树的前序遍历、中序遍历与后序遍历一直是面试时的常客。这三种遍历方法都有递归实现与非递归实现两种版本。递归实现只需要根据定义书写即可,而非递归实现则会用到其他的数据结构,相对复杂。本文将这三种遍历方法的非递归实现加以总结,以备不时之需。1.前序遍历前序遍历的非递归版本需要用到一个栈,用以记录当前遍历节点的右子节点。回退时,获取栈顶节点,继续前序遍历。其c++实现如下所示:void ...
2018-09-04 15:38:22
872
原创 KMP算法在c++中的实现
字符串匹配问题是数据结构与算法这门课中的一个经典问题。在由Cormen与Leiserson合著的《算法导论》一书中,按照由简到繁的顺序推导了字符串匹配问题的四种解法,并最终给出了最经典的解决方案:KMP算法。下面将分别对这四种算法进行总结。1.朴素字符串匹配方法朴素字符串匹配方法是大多数人第一眼能够想到的方法:将目标文本逐字符作为起始字符,判断是否存在与模式匹配的子字符串。如果设目标文本长...
2018-08-30 11:33:14
656
原创 你了解c++中的关键字virtual吗?
virtual在英文中表示“虚”、“虚拟”的含义。c++中的关键字“virtual”主要用在两个方面:虚函数与虚基类。下面将分别从这两个方面对virtual进行介绍。1.虚函数虚函数源于c++中的类继承,是多态的一种。在c++中,一个基类的指针或者引用可以指向或者引用派生类的对象。同时,派生类可以重写基类中的成员函数。这里“重写”的要求是函数的特征标(包括参数的数目、类型和顺序)以及返回值...
2018-08-23 20:28:06
11868
6
原创 几种排序方法在c++中的实现
排序问题是数据结构与算法中一门非常重要的学问,很多的问题的解决都是以排序问题为优先的。我总结了几种常见的排序算法,给出它们在c++下的实现代码,并比较了几种算法的运算效率。1.直接插入排序法直接插入排序的思想是:给出一个已从小到大排好序的数组,插入第i个数据。这时候,需要从后向前比较该数据与当前位置数据的大小,找到插入位置将该数据插入,原来位置上的元素向后顺移。这种算法具体的运行时间与...
2018-08-17 11:07:07
901
原创 c++中的“静态”
“静态”这个概念,在学习c++的过程中反复出现过。它在不同的地方具有不同的含义,而对于学习而言,将不同层次的知识放在一起讨论是融会贯通的一种非常好的方法。本文将对c++中的“静态”概念进行探讨。1.静态变量静态变量是存储在静态存储区的变量,这意味着它的生命周期是整个程序的存续期。也就是说,静态变量自声明起到程序结束,始终存储在内存当中。如果不对静态变量进行初始化赋值,则默认其值为0(指针即...
2018-08-13 21:17:57
1059
原创 函数模板与类模板的具体化
这两天在学习《C++ primer》这本书时,发现有关函数与类模板的相关内容多且繁琐,而且容易混淆,因此决定写一篇博客,将它们的概念与之间的区别梳理一下。一.函数模板 在《C++ primer》一书中,函数模板的具体化包括了三个部分:显式具体化,隐式实例化与显式实例化。1.隐式实例化 隐式实例化是我们最常见的类型:根据定义的通用函数模板,编译器按照调用的参数生成特定的模板。如有以下...
2018-08-12 09:47:55
800
原创 2018华为软件精英挑战赛实况记录
今天想写一篇博客记录一下自己参加华为软挑的过程,估计会在接下来一个月陆续更新。题目其实几天前就看过了,代码也写了两天,不过报名还是今天的事。 今年的题目相对还是比较好理解的,而且方向也很明确——用机器学习方法训练数据,随后用装箱问题的思路解决。由于自己缺少机器学习的基础,因此第一步暂时采用了将训练数据按周分段的方法。先统计每周内各虚拟机的申请数目,对于异常数据(如大于平均...
2018-03-18 22:11:07
1989
1
原创 背包九讲自学手册——第二讲
前两天忙着跑OPNET上的程序,没太多时间看背包九讲。下午的时候抽空看了一下完全背包问题,利用晚上的时间将完全背包问题的两种解决方法用C++写了一下。不过由于缺少测试用例,不保证正确性。#include "stdafx.h"#include <iostream>#include <vector>using namespace std;//完全背包问...
2018-03-14 20:37:11
222
原创 背包九讲自学手册——第一讲
前段时间因为忙着做老师的项目,一直没有太多时间去刷题和研究算法,最近稍微空闲了一些。因为发现自己在动态规划问题上的薄弱,加上背包问题是典型的利用动态规划求最优解的问题,因此决定将网上流传的“背包九讲”学习一遍。今天阅读了最简单的一讲:0-1背包问题,并在本地用C++对其进行了实现。 背包问题的题干很简单:给定互不相同的若干商品各一件,以及它们各自的价格与价值(限制为整数)。在...
2018-03-11 22:20:36
311
原创 leetcode 第751题:将IP地址转化为CIDR的C++实现
上周报名leetcode一周一次的contest,但没注意是限时一个半小时内做完,误了时间。尽管如此,还是尝试去做了constest中的四道题。第一题很简单,第二题就是751题,即将一个IP地址转化为CIDR。 以题目所给例子为例。参数中给出的IP是“255.0.0.7”,要涵盖的地址数目是10。“255.0.0.7”转化成二进制表示法就是“11111111.00000000.00
2017-12-27 11:23:18
1716
原创 OPNET中Process Model编译出现“IDB是PDB文件的非法扩展”的解决方法
最近按照老师的要求在自学OPNET,以阅读Tutorial部分的内容为主。今天尝试创建一个进程模型(process model)时,编译提示错误。错误信息如下: IDB是PDB文件的非法扩展 上网查阅资料,无一例外说是OPNET的兼容性问题。于是右击OPNET.exe,选择“属性”,弹出的对话框中选择“兼容性”一栏,将“以兼容模式运行这个程序”前的钩去掉。尝试编
2017-12-06 22:26:11
983
原创 数独问题的c++解决
今天在刷leetcode的时候遇见一道难度为hard的题目,大意是解出给定的数独。感觉比较有应用的价值,便尝试着去做了一下。 首先明确数独问题必有唯一可行解。求数独有效解的基本思想是利用回溯法:从挖空的地方开始,从1到9逐个地去尝试可能的解。如果当前行、列以及所在大方格没有出现重复,则解被暂时接受,并开始尝试以相同的方式求解下一个空格。如果1到9均不成为有效解,则后退至上一个空格,
2017-11-05 21:17:07
2543
原创 sizeof()与size()和length()的区别
这三个函数(运算符)在进行容器或数组操作过程中经常用到。由于用法有相似之处,因此经常混淆。在此对它们的用法进行总结。1.sizeof() sizeof()用于返回括号中的对象在内存中分配的大小,如: sizeof(char)=1; //char型分配一个字节大小的内存 sizeof(int)=4; //int型分配四个
2017-10-17 15:37:51
1854
原创 leetcode 第53题 Maximum Subarray:动态规划的活用
题目大意: 给定一个非空的整数数组nums[],要求求得它的一个子数组,使得该子数组所有成员的和是所有子串中最大的。注意:子数组的所有成员位置上必需是左右相邻的。示例: 给出整数数组[-2,1,-3,4,-1,2,1,-5,4],可求得它的子数组[4,-1,2,1]的各位成员和是所有子数组中最大的,为6。解题思路: 刷了近两个月的题,
2017-10-14 16:13:42
984
原创 leetcode 第220题:Contains Duplicate III——数据结构与容器的合理选用
题目大意: 给定一个整数序列nums和两个整数t和k,要求检查能否在该序列中找到两个元素nums[i]与nums[j],满足:i与j的差的绝对值小于k且nums[i]与nums[j]的差的绝对值小于t。解题思路: 本题题面很简单,解题思路也很明了:使用滑动窗口的方式遍历数组。因为要求i与i的差的绝对值小于i,因此需要比较k+1个元素的值,窗口长度
2017-09-29 15:25:03
314
原创 C++中方括号[]的作用总结
今天在编程的时候,遇到这样一条语句”delete [] p;”,回想之前使用delete基本上都是采用的”delete p;”的方式,比较好奇这两种语句的区别。查找相关资料资料之后,决定进一步地把C++中最为常见的符号“[]”的作用进行总结。
2017-09-25 21:12:06
30232
1
原创 leetcode 第79题:BFS(广度优先搜索)的简单应用
题目大意: 给出一个二维数组,再给出一个字符串,试问该字符串是否存在于这个二维数组中?题目说明: 所谓“字符串存在于二维数组中”,即从二维数组的任一元素出发,从上下左右四个方向“前进”,直到找到整条字符串。
2017-09-21 17:33:33
2464
1
原创 leetcode 第23题:关于递归的一些思考与应用
题目大意:给出若干已经排好序链表的头节点指针,将它们合并成一个成序的链表,返回其头结点指针。示例:给定链表:1->2->3 和 4->6->8,则应当返回链表 1->2->3->4->6->8的头节点指针。
2017-09-07 13:25:44
844
原创 leetcode 第15题:两数求和的扩展
题目大意: 给定一个包含n个整数的数组,试问能否找到三个的元素,使得它们的和为零?返回所有可能的元素集合。
2017-09-04 17:09:47
447
原创 leetcode 第32题:动态规划思想与堆栈的灵活使用
题目大意: 给定一个只用’(‘和’)’组成的字符串,输入其最长合法成对子串的长度。示例: 输入:(()),则应当输出整数4;输入:(()()),则应当输出整数6;输入:((())),应当输出6。
2017-09-01 15:35:18
729
原创 leetcode 第四题:动态规划思想的应用
题目大意:给定一个字符串,找出其最长的子回文串将其返回。所谓回文串,即倒序排列与正序排列一致。说明:假定字符串长度不超过1000示例:输入"babad",输出"bab"或者"aba"解题思路:关于题目有几点要注意的。一是题目默认是有解的,当输入如"abcde"的形式时,解当为"a"或者任一字符代表的字符串;二是有多个解,只需输出一个即可。 在思考这道题时,最先冒出的想
2017-08-29 14:16:16
925
原创 leetcode 第三题:标准容器set与map的使用
题目大意:给出一个字符串,找到该字符串中不含重复字符的最长子串,返回其长度。示例:给出子串:abcabcbb,其最长子串是“abc”,则返回其长度值3。解题思路:看到题目,首先想到的最“笨”的方法就是从第一个字符开始,逐个向后遍历,遇见相同字符则停止,循环该过程,记录并更新子串的最大长。但这么做算法复杂度很高,不推荐使用。 随后我开始寻找其他解决方法。最初是希望能建立一个
2017-08-27 10:23:34
1551
原创 leetcode 第二题:链表的使用
题目大意:给定两个非空链表,分别代表两个非负整数。注意是以倒序的方式存储,并且一个节点存储一位数字。要求将这两个数相加,并将结果以链表的形式返回。说明:这两个数均不包含前导的0,除非这个数就是0。示例:输入链表:(2 -> 4 -> 3) 和链表(5 -> 6 -> 4),代表数字342与465求和,结果为807,输出形式:7 -> 0 -> 8,即倒序输出。解题思路:刚读完题的第一想
2017-08-25 15:04:04
492
原创 leetcode 第一题:使用哈希表解决
题目大意:给定一个整数,试从给定的vector中寻找到两个成员,使它们的和等于给定的整数。说明:默认答案具有唯一解,且同一个成员不可以使用两次。例子:对于[2,7,11,13],给定整数18,则应当返回成员“7”和“11”在此vector中的位置1和2。解题思路: 刚刚看到这道题的时候感觉非常简单,但随即脑海中冒出几个问题: 1.vector中有重复元素
2017-08-21 15:57:35
1825
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人