剑指offer-数组总结

数组

一、双指针

1、反向双指针:

适用题型:排好序的数组中的两个数字之和或者几个数之和可以由两数之和变种

  • 因为排好序,又要求和。
  • 那么当一个指针指向头部时,一个指针指向尾部时。
  • 当两数之和大于目标值时,只需要将尾部指针向移动来减小两数之和;
  • 当两数之和小于目标值时,只需要将头部指针向移动来增加两数之和。

剑指offer专项:题6,题7

2、同向双指针

适用题型:正数数组中子数组的和或者乘积
初始化指针的时候,两个指针都指向数组的头部,如果两个指针的和或者乘积大于目标值时,那么就向移动左指针【向子数组中删除数】;如果个指针的和或者乘积小于目标值,那么就向移动右指针【向子数组中增加数】。
优点:
那么这样迭代的好吃就是一次迭代就够了,时间复杂度是O(n)。

剑指offer专项:题8,题9

二、前缀和

双指针仅适用于所有值是正整数的数组情况,当题目没有说明是正整数的时候就不适合适用双指针的方式,那我们就可以考虑前缀和的方法去解题。
前缀和:就是计算出所有子数组的值,然后根据题目完成对数组的操作。适用的题型也是子数组的和或积【类比于双向指针中的同向指针做的滑动窗口提醒】

下面换一种思路求子数组之和。假设整个数组的长度为n,它的某
个子数组的第1个数字的下标是i,最后一个数字的下标是j。为了计算
子数组之和,需要先做预处理,计算从数组下标为0的数字开始到以每
个数字为结尾的子数组之和。预处理只需要从头到尾扫描一次,就能
求出从下标0开始到下标0结束的子数组之和S0,从下标0开始到下标1结
束的子数组之和S1,以此类推,直到求出从下标0开始到最后一个数字
的子数组之和Sn-1。因此,从下标为i开始到下标为j结束的子数组的和
就是Sj-Si-1。
例如,在数组[1,2,3,4,5,6]中,从下标0开始到下标2结束
的子数组[1,2,3]之和是6,从下标0开始到下标4结束的子数组[1,
2,3,4,5]之和为15,从下标3开始到下标4结束的子数组[4,5]之和
是9,正好15-9=6。

使用前缀和时有一种题型可以尝试使用map+前缀和的方法去解决(key用来放和,value用来放这个和出现的次数)

剑指offer专项:题10,题11,题12,题13,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值