剑指offer_02

文章目录

    • 第二章 面试需要的基础知识
      • 1.1 面试官谈基础知识
      • 1.2 编程语言
      • 1.3 数据结构
      • 1.4 算法和数据操作

第二章 面试需要的基础知识

1.1 面试官谈基础知识

  1. 数据结构和算法,编程能力,部分数学能力,问题分析和推理能力
  2. 编程基础,计算机基础,算法设计
  3. 计算机操作系统,编程语言,数据结构

1.2 编程语言

  1. 考察形式
  • 语言的语法
  • 通过实际写代码解决问题
  1. C++
  • 推荐的书籍<effect c++>
  • 设计模式中单例模式时常常考的内容

1.3 数据结构

  1. 数据结构是技术面试中的重点
  • 主要围绕着数组,链表,字符串,树,队列,栈几种常见的数据结构
  • 数组和链表是面试中常常考的两种数据结构,由于使用了指针,应该注意程序的鲁棒性2.
  1. 数组
  • 数组需要实现申明空间大小,数组支持随机存取,读取时间复杂度为O(1),插入删除操作时间复杂度为O(N)
  • 动态数组的考察,数组和指针的关系
  • 当我们遇到复杂的问题的时候,一个有效的方法就是从一个具体的问题入手,通过分析简单具体的例子,找出普遍的规律。(二位数组的查找)
  1. 字符串
  • C/C++中的字符串都是以“\n”结尾的。
  • 为了节省内存,C/C++把常量字符串放到单独的一个内存区域中,当使用几个不同的指针指向的时候,实际指向的是相同的内存地址。
  • 常考的字符串的复制,比较,插入等。可以打破常规思维,从后往前遍历。
  1. 链表
  • 链表是面试时候被问及最多的一种数据结构
  • 链表的创建,插入删除节点和查询节点实现起来代码量都不大。
  • 在面试中如果要修改输入数据时,最好问面试官是否允许进行修改。

在写测试用例的时候,常常分为功能测试和特殊输入测试。

  1. 树是一种在实际编程中常常用到的数据结构,由于树的实验涉及到大量的指针,所以面试中考的概率不大
  2. 面试中要考察的树常常为二叉树,常考查二叉树的遍历:
  • 前序遍历
  • 中序遍历
  • 后序遍历

3种遍历方法都有循环和递归的时现,需要对这6种方法比较了解。

  • 二叉树的另外两个特例是堆和红黑树
  • 有很多快速找到最大值和最小值的算法都用到堆来实现
  1. 栈和队列
  2. 栈是一个非常常见的数据结构,在计算机中被广泛应用。
  • 通常栈是一个不考虑排序的数据结构,找到最大值或者最小值需要O(N)的时间。
  1. 队列是另外一种比较重要的数据结构
  • 对列和栈两个数据结构是相互联系的,可以相互表示。

1.4 算法和数据操作

重点掌握二分查找,归并排序,快速排序,能够做到随时随地快速准确的用代码实现他们。
很多算法都可以使用循环和递归实现,其中递归方法看起来代码简洁,但是性能不佳。
位操作应该也要进行掌握

  1. 查找和排序
  • 查找和排序是程序设计中常用到的算法
  • 查找比较简单,包括:顺序查找,二分查找,哈希查找和二叉树查找。
    • 如果面试中要对一个排好序的数组或者部分排序的数组进行查找,都可以考虑使用二分查找的方法
    • 哈希表最主要的优点是可以完成在O(1)时间内查找某个元素,但是需要额外的空间来实现哈希表。
    • 二叉搜索树是树结构在查找算法中的应用。
  • 排序算法比查找算法要难一些,需要我们对常见的一些排序算法熟记于心。
    • 插入排序,冒泡排序,归并排序,快速排序等不同排序算法的优劣。
    • 可以从空间消耗,平均时间复杂度和最坏时间复杂度去分析比较。
    • 快速排序的代码常常被要求写出。
    • 如果面试官要求实现一个排序算法,一定要问清楚排序算法的应用背景,再来决定使用哪种排序算法。
  1. 递归和循环
  • 如归针对一个问题需要重复多次计算相同的问题,则可以使用递归或者循环两种方法。
  • 递归代码相比于循环代码常常比较简洁;在树的前序,中序,后序遍历中常常采用递归算法。如果面试中没有说明用循环还是递归,最好先用循环实现后,再用递归实现。

测试用例:功能测试,边界值测试,性能测试

  1. 位运算
  • 位运算是把数字用二进制表示后,对每一位上的0或者1进行运算。
  • 熟练掌握2进制和10进制之间的转换关系,熟悉掌握二进制数的与,或,异或,左移好和右移操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求完全二叉树的结点个数

第一次见这个题&#xff0c;看时间小于O(N)。。。。。 只能是二分啊。 但是怎么二分&#xff0c;条件是什么&#xff0c;真的想不到。 后来知道了&#xff0c;我们要找最深一层最右边那个结点。借此确定结点个数。 我们知道&#xff0c;满二叉树的结点个数和深度是有公式的&a…

剑指offer_03

文章目录第三章 高质量代码1.1 面试官谈高质量代码1.2 代码的规范性1.3 代码的完整性1.4 代码的鲁棒性第三章 高质量代码 1.1 面试官谈高质量代码 代码应该考虑异常状况和垃圾回收问题&#xff0c;不能忽视边界情况变量&#xff0c;函数命名应该要统一&#xff0c;备注要恰到…

剑指offer_04

文章目录第四章 解决面试题的思路1.1 面试官谈面试思路1.2 画图让问题抽象化1.3 举例让抽象问题具体化1.4 分解让复杂问题具体化第四章 解决面试题的思路 1.1 面试官谈面试思路 编程前讲自己的思路是一项考核指标&#xff0c;不能一开始就变成&#xff0c;面试的时候应该和面…

先序中序后序两两结合重建二叉树

遍历是对树的一种最基本的运算&#xff0c;所谓遍历二叉树&#xff0c;就是按一定的规则和顺序走遍二叉树的所有结点&#xff0c;使每一个结点都被访问一次&#xff0c;而且只被访问一次。由于二叉树是非线性结构&#xff0c;因此&#xff0c;树的遍历实质上是将二叉树的各个结…

剑指offer_05

文章目录第五章 优化时间和空间效率1.1 面试官谈效率1.2 时间效率1.3 时间效率和空间效率的平衡第五章 优化时间和空间效率 1.1 面试官谈效率 1.时间和空间复杂度是写程序的时候&#xff0c;我们需要分析的&#xff0c;最好每次写完代码后自己都可以将程序的时间和空间复杂度…

先序中序数组推后序数组

二叉树遍历 所谓遍历(Traversal)是指沿着某条搜索路线&#xff0c;依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一&#xff0c;是二叉树上进行其它运算之基础。 从二叉树的递归定义可知&#xff0c;一…

剑指offer_06

文章目录第六章 面试中的各项能力1.1 面试官谈能力1.2 沟通能力和学习能力1.3 知识迁移能力1.4 抽象建模能力1.5 发散思维能力第六章 面试中的各项能力 1.1 面试官谈能力 1.礼貌平和&#xff0c;不卑不亢的和面试官沟通&#xff1b;逻辑清楚&#xff0c;详略得到的介绍项目经…

数据结构课上笔记11

满二叉树 (Full binary tree) 除最后一层无任何子节点外&#xff0c;每一层上的所有结点都有两个子结点二叉树。 国内教程定义&#xff1a;一个二叉树&#xff0c;如果每一个层的结点数都达到最大值&#xff0c;则这个二叉树就是满二叉树。也就是说&#xff0c;如果一个二叉树…

数据结构和算法(01)--- 算法复杂度

文章目录算法时间复杂度算法时间复杂度 要判断算法的好坏&#xff0c;可以从时间方面进行分析。算法运行的越快&#xff0c;所用的时间越短则算法越好。但是同一个算法在不同的平台上的运行时间不同。那么又该如何进行评判呢&#xff1f;我们采用时间复杂度进行衡量。 1.算法时…

数据结构课上笔记12

二叉树的存储结构 顺序存储结构 完全二叉树&#xff1a;用一组地址连续的 存储单元依次自上而下、自左至右存 储结点元素&#xff0c;即将编号为 i 的结点元 素存储在一维数组中下标为 i –1 的分量中。 一般二叉树&#xff1a;将其每个结点与完 全二叉树上的结点相对照&…

kaggle(01)-泰坦尼克号问题

经典又兼具备趣味性的Kaggle案例泰坦尼克号问题 大家都熟悉的『Jack and Rose』的故事&#xff0c;豪华游艇倒了&#xff0c;大家都惊恐逃生&#xff0c;可是救生艇的数量有限&#xff0c;无法人人都有&#xff0c;副船长发话了『lady and kid first&#xff01;』&#xff0c…

数据结构课上笔记13

树存储结构 父节点表示法 数据域&#xff1a;存放结点本身信息。 双亲域&#xff1a;指示本结点的双亲结点在数组中的位置。 对应的树&#xff1a; /* 树节点的定义 */ #define MAX_TREE_SIZE 100typedef struct{TElemType data;int parent; /* 父节点位置域 */ } PTNode;type…

数据结构课上笔记14

图是一种&#xff1a; 数据元素间存在多对多关系的数据结构 加上一组基本操作构成的抽象数据类型。 图 (Graph) 是一种复杂的非线性数据结构&#xff0c;由顶点集合及顶点间的关系&#xff08;也称弧或边&#xff09;集合组成。可以表示为&#xff1a; G&#xff1d;(V, V…

kaggle(03)-自行车租赁预测问题(基础版)

文章目录问题描述&#xff1a;问题解决分析问题&#xff1a;解决问题第一步&#xff1a;读取原始数据第二步&#xff1a;观察原始数据第三步&#xff1a;原始数据的可视化第四步&#xff1a;数据的预处理时间属性的分解第五步&#xff1a;数据的特征提取特征生成特征选择第六步…

二叉树序列化/反序列化

二叉树被记录成文件的过程&#xff0c;为二叉树的序列化 通过文件重新建立原来的二叉树的过程&#xff0c;为二叉树的反序列化 设计方案并实现。 &#xff08;已知结点类型为32位整型&#xff09; 思路&#xff1a;先序遍历实现。 因为要写入文件&#xff0c;我们要把二叉树…

机器学习总结(17)-XGBoost

文章目录lecture17&#xff1a;XGBoost(eXtreme Gradient Boosting)目录1. XGBoost的基本信息2. XGBoost与GBDT的异同点3. XGBoost的原理3.1定义树的复杂度3.2 分裂节点3.3 自定义损失函数4. XGBoost的使用lecture17&#xff1a;XGBoost(eXtreme Gradient Boosting) 目录 1. …

C++基础学习(01)--(介绍,环境配置,基本语法,注释)

文章目录目录一. c介绍二. c开发环境到的配置三. c基本语法四. c注释目录 一. c介绍 C 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言&#xff0c;支持过程化编程、面向对象编程和泛型编程。 C 被认为是一种中级语言&#xff0c;它综合了高级语言和低…

《Head First设计模式》读书笔记_第一章

策略模式 例&#xff1a;设计一个模拟鸭子游戏&#xff0c;游戏中有各种鸭子&#xff0c;一边戏水一边嘎嘎叫。 所以学习设计模式前&#xff0c;我们最先想到的就是设置一个超类&#xff0c;并让其他子类去继承这个类&#xff0c;UML图如下&#xff1a; * * 但是&#xff0…

根据数组建立平衡二叉搜索树

它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1&#xff0c;并且左右两个子树都是一棵平衡二叉&#xff08;搜索&#xff09;树。 二分&#xff1a;用有序数组中中间的数生成搜索二叉树的头节点&#xff0c;然后对数组的左右部分分别生成左右子树即可&#xff08;重复…

C++基础学习(02)--(数据类型,变量类型,变量作用域,常量,修饰符类型)

文章目录目录一. 数据类型C 中的数据类型typedefenumeration枚举类型c中变量类型二.变量作用域三.常量四.修饰符类型目录 一. 数据类型 C 中的数据类型 使用编程语言进行编程时&#xff0c;需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着&a…