随笔分类 - 剑指Offer
学习记录
摘要:动态规划是热门话题,如果一个面试题就问题的最优解,通常是最大值和最小值,而且能分解成若干个子问题,子问题也能分解更小的子问题,就能考虑动态规划 线分析要能否把大问题分解成小问题,小问题存在最优解,然后把小问题组合起来能够得到整个问题的最优解,用动态规划 为了避免重复求子问题,可以用从下往上的顺序计算
阅读全文
摘要:从解决问题的每一步的所有可能选项里系统的选择出一个可行解决方案。回溯法非常适合有多个步骤组成的问题,每个步骤有多个选项,当我们在某一部选择了其中的额一个选项,就进入下一步,然后又面临新的选项。重复选择到达最终状态 用回溯法解决的问题的所有选项可以形象的用树状结构表示。在某一步有n个可能的选项,那么该
阅读全文
摘要:查找:顺序查找,二分查找,哈希表查找,二叉排序树查找。 哈希表和二叉排序树考察重点在于数据结构而不是算法 哈希表的主要优点是我们利用他能够在O(1)时间内查到某一元素,是效率最高的查找方式:但是缺点是需要额外的空间来实现哈希表。 二叉排序树查找算法对应的数据结构是二叉搜索树 排序比查找要复杂一些。比
阅读全文
摘要:如果我们需要重复多次计算相同问题,则通常可以选择用,递归或者循环两种不同方法。递归实在一个函数内部调用这个函数自身。而循环是通过设置计算的初始值以及终止条件,在一个范围内重复运算。比如求1+……+n,我们可以同递归或者循环两种方式求出结果,对应代码如下 public class addFrom1To
阅读全文
摘要:结构: 除了根节点之外每个节点只有一个父节点,根节点没有父节点。 除了叶节点之外所有节点都有一个或多个子节点,叶子节点没有子节点。 父节点和子节点之间用指针链接。 由于树的操作会涉及大量的指针,因此面试题都不容易。 树的遍历方式: 前序遍历:根-左-右 中序遍历:左-根-右 后序遍历:左-右-根 层
阅读全文
摘要:栈是非常常见的数据结构,比如操作系统会给每个线程创建一个栈用来存储函数调用时哥哥函数的参数、返回地址和临时变量等。栈的特点是后进先出,最后被压入(push)的元素会被第一个弹出(pop) 通常栈是一个不考虑排序的数据结构,需要O(n)才能找到最大或者最小元素 队列是另一种很常见的数据结构,和栈不同,
阅读全文
摘要:链表是面试常考问题 结构: 由指针把若干个节点连接成链状结构 包括创建、插入、删除等操作 链表是一种动态数据结构,是因为在创建链表时,无需知道链表长度 当插入一个节点时,我们只需要微信节点分配内存,然后调整指针的指向来确保新节点被连接到链表中 内存分配不是在创建链表时一次性完成的,而是每添加一个节点
阅读全文
摘要:字符串是由若干字符组成的序列。字符串在编程时使用的频率非常高。 C/C++中每个字符串都以\0为结尾,这样我们就能很方便的找到字符串的最后尾部。但由于这个特点,每个字符串中都有一个额外字符的开销,很容易造成字符串越界 例如 char str[10]; strcpy(str,"0123456789")
阅读全文
摘要:O(1)时间读写任何元素,时间效率高 用数组实现简单的哈希表 把数组的下标设为哈希表的键值(Key) 把数组中的没一个数组设为哈希表的值(Value) 这样每一个下表及数组中改下表对应的数字就组成了一个键值对,就可以在O(1)时间内实现查找 在C++中,当数组作为函数的参数进行传递时,数组会自动退化
阅读全文
摘要:设计一个类,只能生成该类的一个实例 只能生成一个实例的类是实现了单例模式的类型。由于设计模式在面向对象程序设计中起着举足轻重的作用,面试过程中很容易被问到。 方法一:只适用于单线程环境 生成一个实力,必须把构造函数设计成为私有函数,以禁止他人创建实例。我们可以定义一个静态的实例,在需要的时候创建该实
阅读全文

浙公网安备 33010602011771号