这五道数组相关的面试题,你必定要会!

关于代码的一切尽在「代码随想录


在算法面试中,数组是必考的基础数据结构
程序员

其实数据的题目在思想上通常比较简单的,一想就是这么一回事面试

可是若是不熟练的话,用代码实现就不是那么回事了,难就难在代码实操上算法

这里呢 我从leetcode中给你们总结了五道数组相关的经典面试题目数组

每一道题目都表明一个类型,一个思想,若是没有作过的同窗强烈建议抽空作一下微信

第一道:搜索插入位置

leetcode 编号35数据结构

这道题目呢,考察的数据的基本操做,思路很简单,可是在经过率在简单题里并不高,不要轻敌less

能够使用暴力解法,经过这道题目,若是求更优的算法,建议试一试用二分法,来解决这道题目编辑器

暴力解法时间复杂度:O(n)
二分法时间复杂度:O(logn)flex

二分法是算法面试中的常考题,建议经过这道题目,锻炼本身手撕二分的能力spa

第二道:移除元素

leetcode 编号27

在这道题目中,咱们只要理解数组在内存中的结构,就知道数据中的元素只能被覆盖掉,而能直接删掉

因此这里题目中说的移除元素,实际上是覆盖掉某一个元素

那么暴力的解法,很简单,两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组

很明显暴力解法时间复杂度是O(n), 而后尝试一个更优解,快慢指针法,时间复杂度能够作到O(n)

快慢指针法是解决数据问题中常见操做,头一个接触这个算法 仍是有点懵的,

建议经过这道题目了解一下快慢指针法

第三道:赎金信

leetcode 编号383

这道题题意很清晰,就是用判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成,可是这里须要注意两点1.

  • 第一点“为了避免暴露赎金信字迹,要从杂志上搜索各个须要的字母,组成单词来表达意思” 这里说明杂志里面的字母不可重复使用。

  • 第二点 “你能够假设两个字符串均只含有小写字母。” 说明只有小写字母,这一点很重要

由于题目只有小写字母,那咱们能够采用空间换取时间的哈希策略(字典计数法),

用一个长度为26的数组还记录magazine里字母出现的次数,而后再用ransomNote去验证这个数组是否包含了ransomNote所须要的全部字母。

建议经过这道题目,深刻理解一下字典计数法的思想

第四道:长度最小的子数组

leetcode 编号209

这道题目暴力是也能够的,时间复杂度为O(n^2)

其实也是经过一个快指针和慢指针来实现一个滑动窗口,最终获得长度最小的子数组,时间复杂度为O(n)

建议经过这道题目了解一下滑动窗口的思想

第五道:螺旋矩阵

leetcode 编号59

这是一道模拟题,就是模拟螺旋矩阵

这道题绝对是面试中的常客,特别是笔试的时候

并且这道题不少同窗就算作过,过一段时间,仍是作这道题目 ,仍是作很差。

解题的关键在于在循环遍历的时候须要定义好本身的循环不变量

这道题目是数组面试题中最多见的一个类型之一

总结

这五道题是数组中很是典型的题目

若是这几道题目尚未作过,还等啥,赶忙搞起啊!


往期 精彩回顾




程序员算法面试中,必须掌握的数组理论知识
程序员为何要使用Markdown
二分法其实很简单,为何总是写不对!!

我的微信,欢迎来撩!

我就知道你[在看]

本文分享自微信公众号 - 代码随想录(code_thinking)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索