更新中…
本文主要概括总结了一些面试中编程题目的分类,以及常见的一些解决办法。
题目分类主要为两种方式:(1)按照 数据结构 分类;(2)按照 算法思想 进行分类。
按照数据结构划分
首先了解各个数据结构的一些基本特性,然后才能找到适合的场景。而在面试中,主要考察的是你对于不同数据结构的性质的理解。
基本类型
- 乘除法
- 异或运算
数组 - 1维
数组的特性
随机访问
(1)【随机性】 数组具有随机访问的特性(根据下标,快速定位到数据)。所以可以利用一定的hash法,将数据与其下标形成一定的映射。(比如:年龄为1 到 35,那么可以映射到一个 整型数组A中, A[i]中 i 表示 年龄,此时我们只是应用了下标,而实际存储数据的空间并没有使用,所以我们可以利用其做其他事情,比如说统计人数)
(2)【hash应用信号】当数组中含有有限范围的整型时,那么这类问题很可能可以通过利用数据与下标的hash关系得以解决。
相关题目:
* 【下标与hash】217. Contains Duplicate
1维数组 + 查找 + 有序
数组中求第K大数
问题:
第 k 大的数一定能 找到?(二分查找的过程不会跳过?)
每次排除了无效信息,不断排除,一定可以找到 k 。(排除思维理解二分查找,思想和这里很像)
1维数组 与 回溯
【数组 + 排列 + 回溯(枚举)】46. Permutations
【数组 + 排列 + 回溯 + 去重 】47. Permutations II
环形数组
这类问题下标的控制要尤其注意。
(示例2:【栈 + 环形数组】 503. Next Greater Element II)
数组 - 2维
二维数组通常可以用来刻画地图规划,棋类等问题。在解决这些问题时,都用到了重要的算法思想(后面会介绍)。
地图类问题
地图规划类问题,通常可以通过动态规划,回溯法来解决。(见下面例子)
【数组 + 回溯法 + 字符地图 + 存在类问题】79. Word Search
【数组 + 动态规划 + 无障碍方格地图 + 最值类问题】64. Minimum Path Sum
【数组 + 动态规划 + 路径数量计算问题】62. Unique Paths (之所以说其动态规划,因需考虑多阶段决策)
【数组 + 动态规划 + 有障碍地图 + 路径数量计算】63. Unique Paths II ( 在上面题目上加入有障碍)
感想:
【解决复杂问题】62. Unique Paths 与 63. Unique Paths II 题目非常相似,63题目只是在62的基础上,在地图上加入了障碍信息。其解答的过程告诉我们,当遇到一个很复杂的问题时,尝试去掉一些条件(简化问题),求得解之后,再去增加条件求解。
棋类问题
棋类等问题,通常可以用回溯法来