📜  学术界未教授的基本算法技术

📅  最后修改于: 2021-06-26 12:35:30             🧑  作者: Mango

我们通常在学者中研究大多数算法技术,例如搜索,排序,动态编程,贪婪算法,分而治之,回溯等。但是,以下技术通常不被教授,并且在解决面试和竞争性编程中经常用于解决问题。

前缀求和技术

在这种技术中,我们对数组进行预处理,然后制作另一个称为前缀和数组的数组。前缀总和数组计算从索引0到当前索引的元素之和。

  • 数组的平衡指数
  • 查找是否有一个总和为0的子数组
  • 最大子数组大小,以使该大小的所有子数组的总和小于k:
  • 可以写为大多数连续质数之和的质数。
  • 两个二进制数组中具有相同总和的最长跨度:
  • 最大子数组求和模m
  • 最大子数组大小,以使该大小的所有子数组的总和小于k
  • 在n范围内出现的最大整数:
  • 购买所有硬币的最低成本,每个硬币允许有k个额外的硬币:
  • 以任意概率分布方式的随机数生成器:

重要链接:
前缀和的实践问题
有关前缀总和的最新文章

两指针算法

两个指针确实是一种简单有效的技术,通常用于在排序数组中搜索对。

  • 从两个排序的数组中找到最接近的对
  • 在总和最接近x的数组中找到对
  • 找到所有零和的三元组
  • 查找一个三元组,将其总和成给定值
  • 找到一个三元组,使得两个和等于第三个元素
  • 查找四个元素加和成给定值

重要链接:
关于两指针的最新文章
两个指针的练习题

窗户滑动技术

该技术显示了如何将某些问题中的嵌套for循环转换为单个for循环以减少时间复杂度。

  • 大小为k的所有子数组的最大值
  • 查找具有给定总和的子数组|设置1(负数)
  • Anagram子串搜索(或搜索所有排列)
  • 计算到达第n个楼梯的方法
  • 具有给定总和的大小为k的子数组

重要链接:
推拉窗的实践问题
最近关于窗户滑动的文章

除了这些C++中的STL和Java中的Collection之外,学术上也没有教授过,如果您的程序分别使用C++和Java ,则它们非常重要。

奖励提示:每当您解决问题时,请确保您对其进行了适当的分析。在这里,“分析”与其效率无关,而是“在问题中找到模式”。有一种将问题归为一类模式的实践,这会使您变得更好。这是因为当您再次看到类似的问题时,您的大脑会立即识别出该模式,然后将其拾取并提供给您。这似乎很快,并且使您也有一点自信..祝您编程愉快!!!

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。