最近刷了初级算法的数组里面的题,总结出了对于数组类问题的解决方法
1.暴力法
- 暴力法往往简单易想,当然其效率往往不是最好的,但是如果实现想不出优秀的方案,最好还是写出暴力法的解决方法,并且有总比没有好
2.双指针法
- 双指针是泛用性最强的一个算法,其主要适用于数组中从前往后,或从后往前的数据交换过程,通过前后两个/首尾两个指针指向不同的数据,来进行数据的交换或处理。
3.逻辑特性分析法
- 之所以我选择这个名字,是因为这里面的算法泛用性没有那么强,往往是针对不同问题的不同逻辑性来实现解决方案的,具体有:
- (1)位运算方法:比如抑或运算在去除相同数字时相当好用;
- (2)波峰波谷法:这是一个泛称,主要是针对类似股票买入卖出、山峰积水等问题的统称,其往往与波峰和波谷有直接关联,其主要思想有两种,一是考虑当前问题的逻辑特性,找到其本质所在(如股票买入卖出其实就是大减小),二是需要结合前后波峰波谷的数值,来实现操作;
- (3)排序算法结合法:排序算法中的思想如快速排序、归并排序、堆排序与冒泡排序等,其思想可以借鉴到大量数组操作上,如冒泡用于交换,快排归并用于查找。
4.四矩阵法
- 四矩阵法主要用于数组矩阵的旋转问题之类,其思想在于将矩阵本身分为从外到内的多个n*1的小矩阵,然后再考虑问题的解决方案。具体有两种:
- (1)风车图形法:外层大循环实现风翼内缩,内层小循环实现风翼的绘制,最终的一步为风翼在内部的根点连接,从而解决问题;
- (2)梯形矩阵逼近法:外部大循环用于内缩,而在内部的小循环实现一整圈的四矩阵交换,在完成一层循环后,内层循环的上限-1且下限+1,从而实现梯形逼近,解决问题。