02 2020 档案

摘要:面试题26:树的子结构。输入两棵二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下: struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight; }; 我们可以分两步解决这个问题 阅读全文
posted @ 2020-02-29 14:58 epiphanyy 阅读(2) 评论(0) 推荐(0) 编辑
摘要:函数是一个命名了的代码块,我们通过调用函数执行相应代码。函数可以有0个或多个参数,通常会产生一个结果。 一个典型的函数定义包括返回类型、函数名、由0个或多个形参组成的列表和函数体。形参以逗号‘,’隔开,形参列表位于一对圆括号内。 我们通过调用运算符()来执行函数,它作用于一个表达式,该表达式是函数或 阅读全文
posted @ 2020-02-26 23:47 epiphanyy 阅读(16) 评论(0) 推荐(0) 编辑
摘要:鲁棒是英文Robust的音译,有时也翻译成健壮性。鲁棒性指程序能够判断输入是否合乎规范要求,并对不符合要求的输入予以合适的处理。 容错性是鲁棒性的一个重要体现,不鲁棒的软件在发生异常事件时,如用户输入错误的用户名、试图打开的文件不存在或者网络不能连接,会出现不可预见的诡异行为,或者干脆整个软件崩溃。 阅读全文
posted @ 2020-02-25 17:07 epiphanyy 阅读(7) 评论(0) 推荐(0) 编辑
摘要:面试题19:正则表达式匹配。请实现一个函数用来匹配包括’.‘和’*‘的正则表达式。模式中的’.‘表示任意一个字符,而’*'表示它左面的一个字符可以出现任意次(含0次),本题中,匹配是指字符串的所有字符匹配整个模式,即模式中有一种情况与要匹配的串相同则匹配成功。例如,字符串"aaa"与模式"a.a"和 阅读全文
posted @ 2020-02-23 00:04 epiphanyy 阅读(3) 评论(0) 推荐(0) 编辑
摘要:面试题18:删除链表的节点。 (1)在O(1)的时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点,链表节点定义如下: struct ListNode { int m_nValue; ListNode *m_pNext; }; 该问题的常规做法是从头节点开 阅读全文
posted @ 2020-02-21 22:59 epiphanyy 阅读(7) 评论(0) 推荐(0) 编辑
摘要:由于精度原因,判断两个小数是否相等不能用==: int main() { double base = 0.1 + 0.2; double b = 0.3; cout << (base == b) << endl; // 输出0 } 以上代码输出0的原因是十进制转换为二进制会损失精度,由于0.1转换为 阅读全文
posted @ 2020-02-19 14:46 epiphanyy 阅读(5) 评论(0) 推荐(0) 编辑
摘要:位运算是把数字用二进制表示后,对每一位上的0或者1的运算。 面试题15:二进制中1的个数。请实现一个函数,输入一个整数,输出该数二进制表示(即补码表示)中1的个数。例如,把9表示成二进制是1001,有2位是1。因此,如果输入9,则函数输出2。 很快我们得到一个思路,先判断该数二进制表示中右边一位是不 阅读全文
posted @ 2020-02-18 14:25 epiphanyy 阅读(4) 评论(0) 推荐(0) 编辑
摘要:如果面试题是求一个问题的最优解(通常是求最大值或最小值),而且 1.该问题能分解成若干个子问题。 2.子问题也存在最优解,如果把小问题的最优解组合起来能够得到整个问题的最优解,即整体问题的最优解依赖于各个子问题的最优解。 3.这些小问题之间有重叠的问题,即在分解大问题的过程中反复出现相同子问题。 就 阅读全文
posted @ 2020-02-17 22:20 epiphanyy 阅读(6) 评论(0) 推荐(0) 编辑
摘要:回溯法可以看成蛮力法的升级版,它从解决问题的每一步的所有可能选项里系统地选择一个可行的解决方案。回溯法适合由多个步骤组成的问题,并且每个步骤有多个选项。 用回溯法解决的问题的所有选项可以用树状结构形象地表示,在某一步有n个可能的选项,那么该步骤可以看做树状结构中的一个节点,每个选项看成树中节点连接线 阅读全文
posted @ 2020-02-16 16:08 epiphanyy 阅读(5) 评论(0) 推荐(0) 编辑
摘要:快排:先在数组中选择一个数字,接下来把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边: #include <iostream> using namespace std; int Partition(int data[], int length, int 阅读全文
posted @ 2020-02-14 17:33 epiphanyy 阅读(3) 评论(0) 推荐(0) 编辑
摘要:很多算法都可以用递归和循环两种不同方式实现,通常基于递归的实现方法代码会比较简洁,但性能不如基于循环的实现方法。 递归是在一个函数内部调用这个函数自身。循环是通过设置计算的初始值及终止条件,在一个范围内重复运算。如求1+2+…+n: #include <iostream> using namespa 阅读全文
posted @ 2020-02-10 20:46 epiphanyy 阅读(5) 评论(0) 推荐(0) 编辑
摘要:我们说链表是一种动态数据结构是因为在创建链表时,无需知道链表的长度。当插入一个节点时,我们只需要为新节点分配内存,然后调整指针的指向来确保新节点被链接到链表当中。内存分配不是创建链表时一次性完成的,而是每添加一个节点分配一次内存,由于没有闲置的内存,链表的空间效率比较高。 如果单向链表的节点定义如下 阅读全文
posted @ 2020-02-09 14:47 epiphanyy 阅读(5) 评论(0) 推荐(0) 编辑
摘要:C/C++中每个字符串以字符’\0’结尾,有时容易出错: char str[10]; strcpy(str, "0123456789"); // 出错 为了节省内存,C/C++常把常量字符串放到单独的一个内存区域。当几个指针指向相同的常量字符串时,他们实际会指向相同的内存地址: char str1[ 阅读全文
posted @ 2020-02-06 16:26 epiphanyy 阅读(3) 评论(0) 推荐(0) 编辑
摘要:int GetSize(int data[]) { return sizeof(data); } int main() { int data[5] = { 1,2,3,4,5 }; cout << sizeof(data) << endl; int *p = data; cout << sizeof 阅读全文
posted @ 2020-02-03 00:14 epiphanyy 阅读(4) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示