剑指offer-数组总结

导读:本篇文章讲解 剑指offer-数组总结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

数组

一、双指针

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,

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/96215.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!