- 博客(123)
- 资源 (7)
- 收藏
- 关注
常用的python 命令
安装依赖的命令venv虚拟环境# 下载依赖包# 创建虚拟环境# python -m venv <虚拟环境名称>python -m venv venv # 创建名为venv的虚拟环境# 激活虚拟环境source venv/bin/activate # linux系统venv\Script\venv # windows 系统...
2019-10-22 15:38:40
252
转载 全局变量、局部变量、const、static、内存管理和释放
一、全局变量 全局变量也称为外部变量,是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,应该做全局变量说明。只有在函数内经过说明的全局变量才能使用。但在一个函数之前定义的全局变量,在该函数内使用可以不再加以说明。 如何在不同文件中引用一个已经定义过的全局变量?可以用引用头文件的方式,也可以用extern关键字。二、...
2018-11-16 10:42:24
10579
转载 面试题68:树中两个结点的最低公共祖先
一、题目输入两个树结点,求它们的最低公共祖先。二、关键 三、解释1.第一种类型的题目:如果是在二叉树中找出两个树节点。则解题思路如下:二叉搜素树都是经过排序的,位于左子树的节点都比父节点小,位于右子树的节点都比父节点大,我们只需要从树的根节点开始和两个输入的节点进行比较。如果当前节点的值比两个节点的值都大,那么最低的共同父节点一定在当前节点的左子树中,于是下一步遍历当前节点的左...
2018-11-16 10:42:13
319
1
转载 面试题53(三):数组中数值和下标相等的元素
一、题目假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数找出数组中任意一个数值等于其下标的元素。例如,在数组{-3, -1,1, 3, 5}中,数字3和它的下标相等。二、关键三、解释四、代码#include <cstdio>int GetNumberSameAsIndex(const int* numbers, int length)...
2018-11-16 10:42:01
435
1
转载 面试题54:二叉搜索树的第k个结点
一、题目给定一棵二叉搜索树,请找出其中的第k大的结点。二、关键1.中序遍历的结果中,第k个就是第k大。三、解释四、代码#include <cstdio>#include "../Utilities/BinaryTree.h"const BinaryTreeNode* KthNodeCore(const BinaryTreeNode* pRoot, uns...
2018-11-16 10:41:48
157
转载 面试题53(二):0到n-1中缺失的数字
一、题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0到n-1之内。在范围0到n-1的n个数字中有且只有一个数字不在该数组中,请找出这个数字。二、关键三、解释1.解题思想:基于二分查找的思想来查找,如果中间元素的值和下标相等,那么下一轮只用查找右半边,如果中间元素的值和下标不相等,并且它前面一个元素和它的下标相等,则中间这个数字正好是第一个值和下标不相...
2018-11-16 10:41:38
807
1
转载 面试题53(一):数字在排序数组中出现的次数
一、题目统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3,3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。二、关键三、解释四、代码#include <cstdio>int GetFirstK(const int* data, int length, int k, int start, int end);in...
2018-10-19 17:47:47
223
转载 面试题48:最长不含重复字符的子字符串
一、题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从'a'到'z'的字符。二、关键1.使用一个数组来保存某个字符最近出现的位置。2.三、解释1.方法一:2.方法二:(推荐掌握)具体见P236四、代码#include <string>#include <iostream>// 方...
2018-10-19 17:47:40
178
转载 面试题45:把数组排成最小的数(不会)
一、题目输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321},则打印出这3个数字能排成的最小数字321323。二、关键三、解释1.解题思路:如果两个数字m和n能后拼接成数字mn和nm。如果mn<nm,那么我们应该打印出mn,也就是m应该排在n的前面,我们定义此时m小于n;反之,如果nm<mn,则...
2018-10-19 17:47:33
149
转载 面试题62:圆圈中最后剩下的数字(法一懂,法二不懂)
一、题目0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。二、关键1.使用list模拟一个环形链表。每次迭代器扫描到链表结尾的时候,就要把迭代器移到链表的头部。三、解释1.方法一:2.方法二:不懂四、代码#include <cstdio>#include <list&g...
2018-10-19 17:47:24
268
转载 面试题65:不用加减乘除做加法
一、题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号。二、关键1.十进制使用“三步走”的策略来进行s四则运算:第一步,各位相加,不进位;第二步,做进位;第三步,把前面两步的结果加起来。同理,二进制加法计算也满足“三步走”策略:第一步,各位相加,不进位;第二步,记下进位;第三步,把前面两步的结果相加。2.使用位运算来代替二进制加法运算。(1)a和b...
2018-10-19 17:47:17
182
转载 面试题58(一):翻转单词顺序(简单)
一、题目输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。二、关键1.反转两次。第一次:“.tneduts a ma i”,第二次,每个单词反转:“student. a am i”2.反转字符串的一段的函数reverse。三、解释...
2018-10-19 17:47:09
466
转载 面试题57(二):为s的连续正数序列
一、题目输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。二、关键1.两个指针。三、解释1.2.疑惑:为什么small只需要小于(1+S)/2即可?因为序列是从1,2,到S。四、代码#include <cstdio>vo...
2018-10-19 17:47:00
152
转载 面试题57(一):和为s的两个数字
一、题目输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。二、关键1.两个指针,一个指向头一个指向尾,按照规则向中间靠拢。三、解释四、代码#include <cstdio>bool FindNumbersWithSum(int data[], int length, int sum, ...
2018-10-19 17:46:52
158
转载 面试题55(二):平衡二叉树
一、题目输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。二、关键三、解释四、代码#include <cstdio>#include "..\Utilities\BinaryTree.h"// ====================方法1====================...
2018-10-19 17:46:42
170
转载 面试题55(一):二叉树的深度
一、题目输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二、关键三、解释四、代码#include <cstdio>#include "..\Utilities\BinaryTree.h"int TreeDepth(const BinaryTreeNode* pRoot){ ...
2018-10-19 17:46:31
146
转载 面试题44:数字序列中某一位的数字(没看懂)
一、题目数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数求任意位对应的数字。二、关键三、解释p225.四、代码#include <iostream>#include <algorithm>using namespace s...
2018-10-18 15:34:54
494
2
转载 面试题43:从1到n整数中1出现的次数(不会)
一、题目输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。二、关键三、解释四、代码#include <cstdio>#include <cstring>#include <cstdlib>// ==================...
2018-10-18 15:34:43
174
转载 面试题42:连续子数组的最大和
一、题目输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。二、关键1.两个变量:一个变量表示累加的子数组和、一个变量最大的子数组和。三、解释1.思路一:根据从头到尾逐个累加的例子中得到的规律,编写代码。2.思路二:使用动态规划。用f(i)表示以第i个数字结尾的子数组的最大和,那么我们的目标是...
2018-10-18 15:34:32
113
转载 面试题41:数据流中的中位数(没看懂)
一、题目如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。二、关键三、解释四、代码#include <cstdio>#include <algorithm>#include <vector>#incl...
2018-10-18 15:34:24
188
转载 面试题40:最小的k个数
一、题目输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。二、关键三、解释1.解法一:使用Partition函数来解决。如果基于数组的第k个数字来调整,则使得比第k位数字小的所有数字都位于数组的坐标,比第k个数字大的所有数字都位于数组的右边。这样调整之后,位于数组中左边的k个数字就是最小的k个数字。限制:数组中数...
2018-10-18 15:34:13
197
转载 面试题39:数组中出现次数超过一半的数字(要掌握第二种)
一、题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。二、关键三、解释1.解法一、时间复杂度为O(n)的算法得到数组中任意第k大的数字的算法?先在数组中随机选择一个数字,然后调整数组中数字的顺序,使得比选中的数字小的数字都在...
2018-10-18 15:33:29
283
转载 面试题38 :字符串的排列
一、题目输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。二、关键1.将字符串看成两部分:第一个字符;第一个字符后面的所有字符。2.递归思想。三、解释1.解题思路:求整个字符串的排列可以看成两步。第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面...
2018-10-18 15:23:43
211
转载 面试题36:二叉搜索树与双向链表(没有思路)
一、题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二、关键1.把树分成3部分来考察:根节点、左子树、右子树,然后把左子树中最大的节点、根节点、右子树中最小的节点链接起来。2.递归策略。三、解释1.理论分析是否能够将二叉搜索树转换为双向链表?在二叉树中,每个节点都有两个指向子节点的指针。在双向链表中,每个...
2018-10-18 15:23:26
186
转载 面试题37:序列化二叉树
一、题目请实现两个函数,分别用来序列化和反序列化二叉树。二、关键1.序列化规则:三个。在根据前序遍历的顺序来序列化二叉树。在遍历时,碰到nullptr指针时,将这种指针序列化为特殊的字符“$”。节点的数值之间使用特殊字符“,”隔开。三、解释详见《剑指offer》P195分析。四、代码#include <cstdio>#include "..\Utilit...
2018-10-18 15:23:13
178
转载 面试题36:二叉搜索树与双向链表(没有思路)
一、题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二、关键三、解释四、代码#include <cstdio>#include "..\Utilities\BinaryTree.h"void ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode...
2018-10-18 15:22:58
108
转载 面试题35:复杂链表的复制
一、题目请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling 指向链表中的任意结点或者nullptr。二、关键1.在原始链表上扩充新的链表。2.m_pSibling指针的指向问题。3.拆分链表。三、解释1....
2018-10-17 09:16:28
147
转载 面试题34:二叉树中和为某一值的路径
一、题目输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二、关键1.保存路径使用栈的后进先出的特点,但是是使用vector实现的(比较好用)。2.三、解释1、解题思路:当用前序遍历的方式访问到某一个节点时,我们把该节点添加到路径上,并累加该节点的值。如果访问的节点时叶节点,并且路径中节点值的和...
2018-10-17 09:16:19
139
转载 面试题33:二叉搜索树的后序遍历序列(基本没思路)
一、题目输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。二、关键1.递归思想。2.分组和分组依据(最后一个是根节点+比根小的是左子树,比根大的是右子树)。三、解释1.解题依据:在后序遍历得到的序列中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两个部分:第一个部分是左...
2018-10-17 09:16:12
129
转载 面试题32(三):之字形打印二叉树
一、题目请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。二、关键1.两个栈。2.两个层的交替。三、解释1.解题思路:按之字形顺序打印二叉树需要两个栈。我们在打印某一层节点时,把下一层的子节点保存到相应的栈里。如果当前打印的是奇数层,则先保存左子节点再保存右子节点到第一个栈中...
2018-10-17 09:16:03
140
转载 面试题32(二):分行从上到下打印二叉树
一、题目从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。二、关键1.队列2.两个变量。三、解释1.队列:使用队列保存将要打印的节点。2.两个变量:把二叉树的每一行单独打印到一行中。一个变量表示当前层中还没有打印的节点数;另个一变量表示下一层节点的数目。3.思路:变量toBePrinted表示在当前层中还没有打印的节点数,变量nextLev...
2018-10-17 09:15:47
226
转载 面试题32(一):不分行从上往下打印二叉树(层次遍历二叉树)
一、题目从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。二、关键1.使用队列deque。三、解释1.解题思想:从上到下打印二叉树的规律:每次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的节点,重复上面的打印操作,直至队列中所有的节点都被打印出来。四、代码#include <c...
2018-10-17 09:15:39
208
转载 面试题31:栈的压入、弹出序列
一、题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。二、关键1.建立一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从该栈中弹出数字。...
2018-10-17 09:15:31
170
转载 面试题30:包含min函数的栈
一、题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。二、关键1.添加辅助栈,每次添加一个元素,就往辅助栈中添加当前最小的那个元素。三、解释四、代码#pragma once#include <stack>#include <assert.h>temp...
2018-10-17 09:15:19
103
转载 面试题29:顺时针打印矩阵
一、题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。二、关键1.思考最后一圈的打印情况和打印的处理方式。2.循环结束的条件。三、解释1.将矩阵想成若干个圈,使用一个循环来打印矩阵,每次打印矩阵中的一个圈。2.循环结束的条件:假设矩阵的行数是rows,矩阵的列数是colums。每一圈的左上角为(startX,startY)(根据实际情况分析出startX...
2018-10-17 09:15:03
212
转载 面试题28:对称的二叉树
OOOOO一、题目请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。二、关键1.将nullptr指针考虑到遍历出来的序列中。三、解释通过比较二叉树的前序遍历和对称前序遍历序列来判断二叉树是不是对称的。如果两个序列是一样的,那么二叉树就是对称的。四、代码#include <cstdio>#include "....
2018-10-17 09:14:51
116
转载 面试题27:二叉树的镜像
一、题目请完成一个函数,输入一个二叉树,该函数输出它的镜像。二、关键三、解释1.解题思路:先前序遍历这棵树的所有节点,如果遍历到的节点有子节点,就交换它的两个子节点。当交换完所有非叶节点的左、右节点之后,就得到了树的镜像。2.(尚未证明)解题思路二:直接前序遍历,不过先遍历右边的,再遍历左边的;交换正常的前序遍历中的后面两步。四、代码#include <cstd...
2018-10-16 15:45:11
155
转载 面试题26:树的子结构
一、题目输入两棵二叉树A和B,判断B是不是A的子结构。二、关键三、解释1.第一步,在树A中找到和树B的根节点的值一样的节点R;第二步,判断以R为根节点的子树是不是包含和树B一样的结构。2.在树A中找与树B根节点的值一样的节点:使用递归的方法遍历树。3.判断树A中以R为根节点的子树是不是和树B具有相同的结构?如果节点R的值和树B的根节点不相同,则以R为根节点的子树和树B肯定不...
2018-10-16 15:35:30
140
转载 面试题25:合并两个排序的链表
一、题目输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链表3所示。二、关键1.递归过程,使用递归函数解决。2.一个链表是空的,结果是不为空的那个。三、解释1.合并两个链表的过程:链表1的头结点的值小于链表2的头结点的值,因此链表2的头结点就是合并后的链表的头结点。相反,那么链表2的头结...
2018-10-16 15:17:45
231
转载 面试题24:反转链表
一、题目定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。二、关键1.三个指针:当前遍历的节点、前一个节点、后一个节点。2.输入的链表头结点是nullptr。输入的链表只有一个节点。输入的链表有多个节点。三、解释四、代码#include <cstdio>#include "..\Utilities\List.h"ListNode...
2018-10-16 15:00:48
160
数字图像处理 matlab版
2017-09-26
C How to Program 7th(1)
2015-05-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人