返回

用前缀和快速通关力扣五道典型题

前端

前言

作为一名算法学习者,我们不可避免地会遇到各种各样的算法问题。而前缀和技巧便是算法世界中的一颗璀璨明珠,它以其简单高效的特点,在数组、子数组、区间和等问题中大放异彩。为了帮助大家更好地掌握前缀和的使用方法,笔者特地从力扣网站中挑选了五道经典题作为讲解范例,希望能对大家有所启发。

一、前缀和的概念与实现

前缀和,顾名思义,就是从数组的开头到当前位置的元素之和。它不仅能帮助我们快速求出子数组的和,还能有效解决一系列复杂的问题。

前缀和的实现方式也很简单,只需创建一个与原数组等长的辅助数组,并按照如下规则填充即可:

  1. 辅助数组的第一项等于原数组的第一项。
  2. 辅助数组的其余各项等于前一项加上原数组的相应项。

二、前缀和的应用

前缀和在算法中的应用非常广泛,这里列举一些常见的场景:

  1. 求子数组和:这是前缀和最基本的应用之一。给定一个数组和两个下标,我们可以通过减去前缀和数组中相应下标的差值,即可快速得到子数组的和。
  2. 区间查询:前缀和也可以用来进行区间查询。如果我们需要统计数组中某一区间内元素的总和,只需减去前缀和数组中区间两端的差值即可。
  3. 查找元素:前缀和还可以用来查找数组中的某个元素。我们可以通过二分查找前缀和数组,找到第一个大于或等于目标值的元素,即可得到该元素在原数组中的位置。

三、力扣五题实战

为了更好地理解前缀和的使用方法,让我们通过力扣中的五道典型题来进行实战演练。

  1. 467. 环绕字符串中唯一的子字符串

这道题要求我们在给定字符串中找到唯一的不重复子字符串。我们可以先使用前缀和数组计算出每个子串的哈希值,然后通过哈希表来查找唯一子字符串。

  1. 795. 区间子数组个数

这道题要求我们统计数组中子数组的个数,其中每个子数组的元素之和都小于或等于一个给定的值。我们可以使用前缀和数组来快速计算子数组的和,然后通过二分查找来找到符合条件的子数组的个数。

  1. 904. 水果成篮

这道题要求我们在给定数组中找到最长的子数组,其中最多包含两种不同的元素。我们可以使用两个指针来维护当前子数组的范围,并使用前缀和数组来快速统计子数组中不同元素的个数。

  1. 992. K 个不同整数的子数组

这道题要求我们在给定数组中找到最长的子数组,其中包含至少 K 个不同的元素。我们可以使用两个指针来维护当前子数组的范围,并使用前缀和数组来快速统计子数组中不同元素的个数。

  1. 1351. 统计有序矩阵中的负数个数

这道题要求我们在给定一个二维矩阵中统计负数的个数。我们可以使用前缀和数组来计算矩阵中每个子矩阵的和,然后通过二分查找来找到符合条件的子矩阵的个数。

结语

通过对力扣五道典型题的讲解,相信大家对前缀和的使用方法已经有了更深入的理解。前缀和是一种非常强大的算法技巧,它可以在许多场景中发挥作用。希望大家能够灵活运用前缀和,在算法学习和编程实践中取得更大的成就。