随笔分类 - 数据结构与算法
摘要:把数字转化为二进制表示后,对每一位的0或者1进行运算,比如与、或、异或、左移、右移等; 左移n位:丢弃最左边的n位,右边补n个0; 右移n位:丢弃最右边的n位,左边补符号位(无符号则补n个0,有符号则补n个1); 二进制中1的个数(剑指offer 面试题10) 题目:请实现一个函数,输入一个整数,输
阅读全文
摘要:递归:代码简洁,但是效率低(每次函数调用都有时间和空间的开销); 循环:和递归相反; 斐波那契数列(剑指offer 面试题9) 题目:写入一个函数,输入n,求斐波那契(Fibonacci)数列的第n项,斐波那契数列的定义:f(n) = f(n-1) + f(n-2),初始值f(0)=0且f(1)=1
阅读全文
摘要:查找:顺序查找、二分查找、哈希表查找、二叉排序树查找; 排序:冒泡、插入、归并、快排; 快排中的Partition函数 对公司所有员工的年龄排序 计数排序 二维数组的查找(剑指offer 面试题3) 详情见“数组”专栏:查找; 旋转数组的最小数组(剑指offer 面试题8) 详情见“数组”专栏:查找
阅读全文
摘要:根节点没有父节点,其他每个结点只有一个父节点; 叶节点没有子节点,其他每个结点都有一个或多个子节点; 二叉树:每个结点最多只能有两个子结点。遍历方式有三种:前序(根-左-右)、中序(左-根-右)、后序(左-右-根); 二叉排序树:对于每个结点,左子树所有结点 < 根结点,根结点 < 右子树所有结点;
阅读全文
摘要:先进先出,只能在队尾插入,队首删除 应用领域:两个队列实现栈、树的BFS(宽度优先遍历); 用两个队列实现一个栈(剑指offer 面试题7习题) 题目:用两个队列实现一个栈。栈的声明如下:请实现它的两个函数push和pop,分别完成在入栈和出栈的功能; 解题思路: 一个非空队列和一个空队列; (1)
阅读全文
摘要:栈只能在顶端插入或删除元素,它的特点是先进后出。 应用领域:操作系统会为每个线程创建一个栈用来存储函数调用时的各个函数的参数、返回值及临时变量。 用两个栈实现队列(剑指offer 面试题7) 题目:用两个栈实现一个队列。队列的声明如下:请实现它的两个函数push和pop,分别完成入队和出队的功能;
阅读全文
摘要:由指针把若干个结点连接成链状结构。它是一种动态结构,因为在创建链表时无须知道链表长度。 插入一个结点时只需要为新结点分配内存,然后调整指针的指向即可。 如果链表的头指针会有更改,那么参数应该设为指向指针的指针,即ListNode **pHead。 优点:空间效率高,因为是每添加一个结点才分配一次内存
阅读全文
摘要:字符串是有若干字符组成的序列,C/C++中每个字符串都以'\0'作为结尾,这样就很容易找到字符串的最后尾部,但是需要一个额外字符的开销,容易造成越界; 常量字符串是在一块单独的只读的内存区域,其内容不可更改; 替换空格(剑指offer 面试题4) 题目:请实现一个函数,把字符串中的每个空格替换成“%
阅读全文
摘要:连续内存且顺序存储,在创建数组时必须指定容量大小; 优点:时间效率高,即查找效率高O(1),而且可以实现简单的哈希表; 缺点:空间效率低,即使只存储一个数据也要为所有数据分配空间,而且插入和删除效率低O(n); 二维数组的查找(剑指offer 面试题3) 题目:在一个二维数组中,每一行都按照从左到右
阅读全文
摘要:转载:https://blog.csdn.net/zhangshk_/article/details/82911093 01 术语: 稳定:假设排序前a在b前面且a=b,那么排序后a仍然在b前面,即排序过程中不会出现跳跃式交换数据,只能相邻的才交换数据; 不稳定:和上面相反; 内排序:比较排序,即所
阅读全文

浙公网安备 33010602011771号