笔试面试
通过对笔试面试过程中遇到的问题进行总结,知识点展开,用易于理解的方式分享给大家。
不要做程序员的小松鼠
愉快的调bug......
展开
-
排序算法:归并排序
归并排序1. 将若干有序序列逐步归并为一个有序序列。2. 二路归并:最简单,将若干有序序列两两归并,直至形成一个有序序列。3. 采用的分治法。4. 二路归并非递归思路: 1. 将序列分成n个序列,每个序列一个元素,这样可以任务每个序列都是有序序列。 2. 逐一合并两个相邻的序列,使得每个序列长度为2. 3. 重复步骤2,直到序列的长度为n。 4. 子序列合并过程原创 2016-05-23 21:37:50 · 4191 阅读 · 1 评论 -
C++编译链接
编译:compile,先针对单独原文件进行处理。每个cpp文件(文本形式存在的源代码)作为一个编译单元,被独立编译成一个目标文件(obj,机器语言形式),它用目标语言来描述.cpp的内容。不同CPP文件的函数可以通过声明的方式使用,通常声明放在H文件里。链接:link,把compile处理的结果组合成一个完整的可执行文件。接器将所有的目标文件obj链接起来,形成一个.exe原创 2016-05-10 19:56:46 · 517 阅读 · 0 评论 -
排序算法:堆排序
堆排序1. 堆: 1. 一种完全二叉树。 2. 每个结点的值都大于或等于其左右子结点的值,大顶堆。 3. 小顶堆同理。2. 是简单选择排序的一种改进:把每次比较的结果用堆来保存起来。3. 堆排序(大顶堆): 1. 将待排序列构造成一个大顶堆。 2. 将堆顶和待排序列最后一个元素交换,也就是保存起来。 3. 将剩余的序列(去除最后一个元素)重新构造成原创 2016-05-14 10:11:06 · 595 阅读 · 0 评论 -
字符串中数字子串的求和
字符串中数字子串的求和题目: 给定一个字符串str,求其中全部数字串所代表的数字之和。要求: 1.忽略小数点字符,例如“A1.3”,其中包含两个数字1和3。 2.如果紧贴数字子串的左侧出现字符‘-’,当连续出现次数为奇数时, 则数字视为负,连续出现的数量为偶数时,则数字视为正。 例如:“A-1BC--12”,其中包含数字为-1和12。例:原创 2016-05-13 21:18:35 · 1279 阅读 · 0 评论 -
C++判断字符串是否为变形词
思路 遍历字符串a计算a中每个字符出现的次数计算b中相同字符的出现次数比较注意: 任一字符串为空返回false。两个字符串长度不等,可直接返回false。复杂度率高n*n,降低复杂度的方法: 使用哈希表,记录字符和出现次数。使用数组或者容器,acsII个数为256,申请256的空间即可,记录字符出现的次数。 /*题目:给定两个字符串str1和str2,如果str1和str2中原创 2016-05-09 20:59:45 · 1661 阅读 · 0 评论 -
转圈打印二维数组
题目要求: 思路: 我的最初思路: 将矩阵的四个边作为边界,一个循环执行四次九十度转弯,用swich、case实现,当四个边界指向一个位置结束循环,但是在拐点的处理上比较麻烦。 资料参考的思路: 写一个函数,输出二维数组一圈的元素。 循环执行上个函数,也就是输出每个圈的元素。原创 2016-05-08 21:37:01 · 1835 阅读 · 0 评论 -
C++基础知识 动态链接库和静态链接库
动态链接库dll: Dynamic-link Library是一种不可执行的二进制程序文件,包含被可执行程序和其他dll调用的函数。windows中最重要的dll: Kernel32.dll:管理内存、进程、线程。User32.dll:执行用户界面任务,比如窗口的创建和消息的传送。GDI32.dll:画图和显示文本。dll不是唯一的扩展名,如linux下常常是.so。使用: 需要文件原创 2016-05-09 19:45:39 · 1991 阅读 · 0 评论 -
C++字符串拷贝实现:递归方法&非递归方法
面试遇到的写代码题: 递归 char* c_copy(char* dst,const char* src) { if (*(src) =='\0') { *dst = '\0'; return dst; } *dst = *src; dst++; src++; c_copy(dst,src);原创 2016-05-09 20:13:05 · 1333 阅读 · 0 评论 -
C++基础知识——二维数组做函数参数
1.确定大小的二维数组void Func(int array[3][10]); void Func(int array[][10]); 2.不确定大小的二维数组转为二维指针:从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,所以可以转换成二维指针。void Func(int **array, int m, int n);原创 2016-05-06 21:03:08 · 1223 阅读 · 0 评论 -
二叉树主要知识点总结
1.二叉树第i层至多有2^(k-1)个结点(i>=1)。 2.深度为k的二叉树上,至多含2^k-1个结点(k>=1) 3.n0 = n2 + 1(度) 4.满二叉树:深度为k且含有2^k-1个结点的树。 5.完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。 (树中所含n个结点和满二叉树中编号为1至n的结点一一对应)。 6.具有n个结点的完原创 2016-05-02 20:34:59 · 6491 阅读 · 0 评论 -
C++ 结构体指针的定义
struct node { …… } ; struct node *p1, *p2 ;typedef struct node { …… }Node;typedef Node* pNode;typedef struct node { ……}*pNode;原创 2016-05-02 21:49:57 · 4731 阅读 · 0 评论 -
C++基础知识——引用
1.引用就是变量的别名,需要用另一个变量或者对象进行初始化:int &b = a。 2.引用必须初始化,初始化时引用指向的对象必须存在。 3.引用和变量指向同一块内存,通过引用可以改变内存中的内容。 4.通常用在函数的形参定义上:void swap(int &a,int &b)。 5.引用已经指向一个对象之后,这个引用不能指向其他对象。 6.一个指向非常量的引用是不可以用字面值或者临时值进原创 2016-05-03 16:25:43 · 402 阅读 · 0 评论 -
C++基础知识——指向指针的指针
1.数组名会退化为首元素的指针,所以指针数组的名字是一个指向指针的指针: int *a[10]; int **b = a;2.由1我们可以理解二重指针为,该指针指向一个数组,这个数组的每个元素都是指针。3.当一个函数需要改变传递给它的指针的值的时候,使用多重指针,也可以用指向指针的引用作为参数(简单且安全)。在数据结构中常会用到。#include <stdio.h>#inclu原创 2016-05-03 17:13:37 · 593 阅读 · 0 评论 -
C++基础知识—常量和常成员函数
1.常量:程序运行的整个过程中,其值始终不可改变的量,const int a = 100;同int const a = 100。2.指向常量的指针:const char *c = "abc"; 与 char const *c = "abc";相同,const的修饰符是char。c[2] = 'd';//F 不能修改指向的常量c = "def";//T数组名退化为指针,指针的值可以原创 2016-05-04 17:29:21 · 789 阅读 · 0 评论 -
C++基础知识——变量存储位置
1.栈区(stack):程序运行时由编译器自动分配存放:函数的参数值,局部变量的值。存储连续,其操作方式类似于数据结构中的栈。栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的,所以空间有限,windows下大多1-2M。2.堆区(heap): 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。存放:程序员原创 2016-05-06 10:31:09 · 1345 阅读 · 0 评论