丰富的线上&线下活动,深入探索云世界
做任务,得社区积分和周边
最真实的开发者用云体验
让每位学生受益于普惠算力
让创作激发创新
资深技术专家手把手带教
遇见技术追梦人
技术交流,直击现场
海量开发者使用工具、手册,免费下载
极速、全面、稳定、安全的开源镜像
开发手册、白皮书、案例集等实战精华
为开发者定制的Chrome浏览器插件
数组
数组数据结构的主要优点是如果知道索引就可以通过O(l)进行快速搜索,但是在数组中添加和删除元素的速度会很慢,因为数组一旦被创建,就无法更改其大小。如果需要创建更长或更短的数组,得先创建一个新数组,再把原数组中的所有元素复制到新创建的数组中。
▌1.给定一个1-100的整数数组,请找到其中缺少的数字。
解决方法与代码:
▌2.请在给出的整数数组中找到重复的数字。
▌3.如何在未排序的整数数组中找到最大值与最小值?
▌4.在给定的成对整数数组中,请找出所有总和等于给定数字的组合。
▌5.如果数组中有多个重复项,如何找到重复的数字?
▌6.用Java语言实现,在给出的数组中,删除重复项。
▌7.用quicksort算法实现对整数数组的排序。
解决方法和代码:
▌8.如何删除现有数组中的重复项?
▌9.用Java语言把数组进行反转。
解决方法和代码:
▌10.如何在不调用库的情况下删除数组中的重复项?
十个问题太少?更多复杂问题,可访问:
链表
链表是另一种常见的数据结构,和数组相似,链表也是线性的数据结构并且以线性方式存储元素。而与数组不同的是,链表不是将元素存储在连续的位置中,而是可以存储在任意位置,彼此之间通过节点相互连接。
链表有多种形式,如:单链表,允许你在一个方向上进行遍历;双链表,可以在两个方向上进行遍历;循环链表,最后节点的指针指向第一个节点从而形成一个环形的链;因为链表是一种递归数据结构,所以在解决链表问题时,熟练掌握递归算法就显得更加重要了。
▌1.如何在一次递归后找到单链表的中间元素?
▌2.检查给定的链表中是否包含循环链表,并找出循环链表的起始节点。
▌3.如何将列表反转(倒置)?
▌4.如何在没有递归的情况下反转单链表?
▌5.删除未经过排序的链表中重复的节点。
▌6.计算单链表的长度。
▌7.找出单链表中倒数第三个节点。
▌8.如何使用Stack查找两个链表的和?
这些问题可以帮你提升解决问题的能力,加深对链表数据结构的了解。
关于数组和链表间的区别,可详细阅读:
更多复杂问题,可访问:
字符串
值得庆幸的是,如果你了解数组,你可以很容易解决关于字符串的问题,因为字符串本身就是一个由字符组成的数组。
因此,你学过的所有用来解决数组编程问题的知识,也可以用来解决字符串的编程问题。
以下是一些在编程面试中高频出现的字符串问题:
▌1.如何输出字符串中重复的字符?
▌2.如何判断两个字符串是否互为回文?
▌3.如何找出字符串首个非重复的字符?
▌4.如何用递归的方法将字符串进行反转?
▌5.如何判断一个字符串是否只包含数字?
▌6.如何找到字符串中重复的字符?
▌7.如何计算一个字符串中元音字母和辅音字母的个数?
▌8.如何计算一个给定字符在字符串中出现的次数?
▌9.如何找出一个字符串的所有排列组合?
▌10.在不使用任何方法库的情况下,如何将一句话中的单词进行反转?
▌11.如何判断一个字符串是否为另一个字符串循环移动的结果?
▌12.如何判断一个字符串是否为回文?
这些问题有助于提高你对字符串数据结构的理解。如果你在没有外界帮助的情况下,可以解决所有这些字符串问题,那么你的水平已经很棒了。
若想了解更多复杂的问题,建议学习一下《AlgorithmDesignManualbyStevenSkiena》这本书中的问题,里面大都是难度很高的算法问题。
如果你需要更多的练习,可以参考这一组问题,包含20个字符串编程问题。
问题链接:
二叉树
到目前为止,我们只涉及了线性数据结构,但现实世界的所有信息都不是以线性的形式展现的,因此出现了树结构。
树结构是一种将数据进行分层存储的数据结构。根据数据存储方式的不同,存在不同类型的树,比如二叉树,其中每个节点至多有两个子节点。
和二叉查找树一样,它们都是最流行的树形式的数据结构。因此,你会发现很多问题基于它们的问题,如计算节点数,如何进行遍历,计算深度,判断它们是否平衡。
解决二叉树问题的关键是要有扎实的知识理论,如什么是二叉树的大小或深度,什么是叶,以及什么是节点。还有对当前流行的遍历算法的理解,如前序遍历、后序遍历和中序遍历。
▌1.如何部署使用二叉查找树?
▌2.给定一个二叉树,如何进行前序遍历?
▌3.在不使用递归的情况下,如何对给定二叉树进行前序遍历?
▌4.给定一个二叉树,如何进行中序遍历?
▌5.在不使用递归的情况下,如何使用中序遍历输出给定二叉树的所有节点?
▌6.如何实现后序遍历算法?
▌7.在不使用递归的情况下,如何对二叉树进行后序遍历?
▌8.如何输出一个二叉查找树的所有叶子?
▌9.如何计算一个给定二叉树的叶子节点数目?
▌10.给定一个数组,如何对其进行二叉搜索?
如果你觉得自己对二叉树编程的理解还不够,无法独自解决这些问题,我列出了我使用过的书籍:
其它算法编程问题
除了数据结构问题,大多数编程面试也会问有关算法、设计、位操作和一般的逻辑问题,在这部分中我会介绍这些问题。
在实际问题中应用这些概念是十分重要的,因为在面试中它们往往都比较难对付。多加练习不仅可以让你对这些概念更熟悉,也会让你在面试过程中更有信心。
▌1.如何实现冒泡排序算法?
▌2.如何用迭代实现快速排序算法?
▌3.如何实现插入排序算法?
▌4.如何实现归并排序算法?
▌5.如何实现桶排序算法?
▌6.如何实现计数排序算法?
▌7.如何实现基数排序算法?
▌8.在不使用第三个变量的情况下,如何交换两个数字的值?