自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 强制类型转换

1.静态类型转换 static_cast<目标类型>(源类型对象) 作用: 1、用于基本数据类型之间的转换,如把int转换成char,两个对象只要有一个方向上能做隐式转换,那么两个方向上都可以做静态类型转换; 2、也可用于子类指针、引用向父类指针、引用的转换;如果是父类向子类转,能成功但是不安全,结果未知; 限制:编译过程中会判断是否能进行静态类型转换,如果不能,报错 2.动态类型转换 dynamic_cast<目标类型>(

2020-10-11 21:02:55 237

原创 运算符 与 重载

1、只能重载为成员函数的运算符 = [] () -> *2、只能重载为全局函数的运算符 << >>3、不能重载的运算符 :: 域限定符 . 直接成员访问运算符 ?: 三目运算符 sizeof 字节数运算符 typeid 类型信息运算符...

2020-09-26 22:22:09 218

原创 定义类对象时,有参构造函数实参的传入(用括号)

以类 classname 为例class classname { int a;public: classname(int val) { cout<<val<<endl; }; };int main(){ classname s1(5); //1 classname s2[5]{1,2,3,4,5}; //2 classname* s3 = new classname(5); /

2020-09-16 16:18:31 768

原创 PING命令中用到的协议

没有TCP,有些题目会考。1、DNS,作用:把域名转换成为网络可以识别的ip地址2、ARP,作用:根据IP地址获取MAC物理地址3、ICMP,作用:TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息(如网络通不通、主机是否可达、路由是否可用等网络本身的消息)。...

2020-09-15 12:29:45 3464

原创 牛客剑指OFFER JZ15 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。思路:1、如果链表为空,返回;2、定义两个节点指针pl = pHead 、pr = pHead->next;3、令 pl -> next = NULL(链表反转后的结尾);4、每一次循环,令:pHead = pr;(pHead指向准备改变节点内指针指向的节点pr)pr = pr->next;(在节点内指针指向改变前,先把下一个节点准备好)pHead->next = pl; (改变节点内指针指向前一个节点pl)pl

2020-09-14 21:15:25 107

原创 牛客剑指OFFER JZ14 链表中倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。思路一:1、定义两个指针p1,p2 初始都指向头结点2、p2先往后挪 k 次,如果p2 挪第 0到k-1次 期间,有 p2 == NULL,说明总结点数小于 k ,直接返回NULL3、如果没有,则p1、p2一起往后挪,直到 p2 ==NULL,此时 p1 指向倒数第 k 个节点。struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) { struct ListN

2020-09-10 21:46:48 113

原创 牛客剑指OFFER JZ13 调整数组顺序使奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:1、直接遍历效率略低,需要考虑其他方法2、“奇数和奇数,偶数和偶数之间的相对位置不变”,可以理解为排序算法中 稳定 的概念,可以考虑用稳定的算法辅助解决。这里试试冒泡。3、将冒泡排序中 “若前一个大于后一个,则两两交换”,改为“若前一个是偶数数后一个是偶数,则两两交换”4、这样一来算法的效果就从“每次循环,将本次循环

2020-09-10 21:26:06 141

原创 牛客剑指OFFER JZ12 数值的整数次方

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0思路:1、n>=0时,a^n = [a ^ (n/2)] * [a ^ (n/2)] * [a * (n%2)];2、n>=0时,n先取绝对值,a^n = [a ^ (n/2)] * [a ^ (n/2)] * [a * (n%2)],再取 1/(a^n) 。3、递归,注意边界条件,n = 0 时 返回 1 ;n = 0 时 返

2020-09-10 21:06:52 109

原创 牛客剑指OFFER JZ11 二进制中1的个数

题目描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。思路一:1、对于任意一个32位二进制表示的数n,现取n = xxxxxx01100 为例子,显然 n-1 = xxxxxx01011,则 n&(n-1) = xxxxxx01000;2、上述例子想说的是,n&(n-1) 这一式子得到的是 n 的最低位的 1 变为 0 后的值。3、令 n 为循环进行条件, n = n&(n-1),当循环结束时,循环进行的次数就是 1 的总数。 int N

2020-09-09 21:31:43 190

原创 牛客剑指OFFER JZ10 矩形覆盖

题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法思路:1、记f(n)为:用2x1的小矩形无重叠地覆盖一个2xn的大矩形,的总方法数。2、则f(n)可以分出以下A、B两种情况:A:在2x(n-1)的基础上加一块B:在2x(n-2)的基础上加两块接下来解释为什么只考虑这两种情况。3、以下两种情况得出的结果总体上会与A、B完全相同,所以不用重复考虑。不太好理解,画图列

2020-09-09 17:29:43 156 1

原创 牛客剑指OFFER JZ9 变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:1、设跳上n级台阶的跳法为f(n)。2、对于跳上n级台阶,可以看做从n-1级的位置再跳一级,或者从n-2级的位置再跳两级…或者从一级台阶跳n-1级。所以跳上n-1、n-2…2、1级台阶的跳法相加就是跳上n级台阶的跳法。3、则有:f(n)=f(n-1)+f(n-2)+f(n-3)+…+f(1);又因为f(n-1) = f(n-2)+f(n-3)+…f(1);所以有f(n)=

2020-09-08 21:46:29 695

原创 牛客剑指OFFER JZ8 跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路:1、设跳上n级台阶的跳法为f(n)。2、对于跳上n级台阶,可以看做从n-1级的位置再跳一级,或者从n-2级的位置再跳两级,所以跳上n-1和n-2级台阶的跳法相加就是跳上n级台阶的跳法。3、则有:f(n)=f(n-1)+f(n-2);4、注意边界条件,f(2)=f(1)+f(0),且显然f(2) = 2,f(1) = 1,且当n > 2时,求f(n)不需要f(0

2020-09-08 21:32:46 104

原创 牛客剑指OFFER JZ7 斐波那契数列

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39思路:递归或者循环吧,但递归n一大就容易超时,体现在这题里就是时而超时,时而通过。(牛客讨论区有人写了动态规划版,感觉挺好的)int Fibonacci(int n ) { if(n < 2) return n; return Fibonacci(n-1) + Fibonacci(n-2);}int Fibonacci(int n )

2020-09-05 22:08:42 138

原创 牛客剑指OFFER JZ6 用两个栈实现队列

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组rotateArray的最小元素。例如数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:考察二分,当然遍历也能做,但你说要是考遍历用得着这样出题么…1、这里的非递减指第n+1个元素必然不小于第n个元素2、由题意得,数组旋转后可以看做由前后A、B两个非递减数组构成,且A中第一个

2020-09-05 21:39:27 123

原创 牛客剑指OFFER JZ5 用两个栈实现队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:1、入栈随意。2、出栈时要确保,当且仅当栈stack2为空时,将栈stack1中所有元素全部依次出栈然后压入stack2中。以下两种情况皆会导致顺序出错:(1)栈stack2中只出栈部分元素,就把栈stack1中的元素压入其中;(2)栈stack1只往栈stack2中压入部分元素,然后栈stack1又压入部分元素。猜测:不同的输入用例组合可能会使得不同的入栈出栈写法也是对的?public:

2020-09-04 21:49:41 103

原创 牛客剑指OFFER JZ4 重建二叉树

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:利用递归的思想1、前序数组pre中的第一个元素pre[0]/一定是这棵树的根节点,创建一个节点的指针node,把pre[0]/存进去,最后函数的返回值也是node。2、根据pre[0]/在中序数组vin中的位置分辨出左右子树上各有哪些元素,将其分别存入

2020-09-04 20:41:52 181

原创 牛客剑指OFFER JZ3 从尾到头打印链表

题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路:从尾至头放进数组,就是最后访问到的先放进数组里,用递归,注意head节点里也有数据。 vector<int> A; int i=0; void _printf(ListNode* node) { if(node == NULL) return; _printf(node->next); A.push_back(node-&gt

2020-09-03 22:21:31 149

原创 牛客剑指OFFER JZ2 替换空格

题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路1: 从头开始1、新建一个数组p,从头开始遍历原数组str2、若str中某位置数据不为空格,则p中对应位置改为该数据3、若str中某位置数据为空格,则p中对应位置改为%20,可用strcat代劳4、最后把p中内容拷到str中,用strcpy优点:简单好想。 void replaceSpace(char *s

2020-09-03 21:35:57 150

原创 牛客剑指OFFER JZ18 二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。思路:1、对于每一个非叶子节点,交换其左右子树,且每个节点只交换一次即可2、可以参考二叉树的前中后序遍历的实现void _Mirror(struct TreeNode* root){ if(NULL == root) return; struct TreeNode* temp = root->left; root->left = root->right; root->righ

2020-09-02 18:46:40 139

原创 牛客剑指OFFER JZ17 树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)class Solution {public: bool zi1(TreeNode* a,TreeNode* b) // 寻找二叉树树A中,与二叉树B根节点的值相同的节点 { bool flag = false; if(a == NULL || b == NULL) return false; // 1、B为空树则返回false

2020-09-01 20:54:41 133

空空如也

空空如也

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

TA关注的人

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