我们通常在学者中研究大多数算法技术,例如搜索,排序,动态编程,贪婪算法,分而治之,回溯等。但是,以下技术通常不被教授,并且在解决面试和竞争性编程中经常用于解决问题。
前缀求和技术
在这种技术中,我们对数组进行预处理,然后制作另一个称为前缀和数组的数组。前缀总和数组计算从索引0到当前索引的元素之和。
- 数组的平衡指数
- 查找是否有一个总和为0的子数组
- 最大子数组大小,以使该大小的所有子数组的总和小于k:
- 可以写为大多数连续质数之和的质数。
- 两个二进制数组中具有相同总和的最长跨度:
- 最大子数组求和模m
- 最大子数组大小,以使该大小的所有子数组的总和小于k
- 在n范围内出现的最大整数:
- 购买所有硬币的最低成本,每个硬币允许有k个额外的硬币:
- 以任意概率分布方式的随机数生成器:
重要链接:
前缀和的实践问题
有关前缀总和的最新文章
两指针算法
两个指针确实是一种简单有效的技术,通常用于在排序数组中搜索对。
- 从两个排序的数组中找到最接近的对
- 在总和最接近x的数组中找到对
- 找到所有零和的三元组
- 查找一个三元组,将其总和成给定值
- 找到一个三元组,使得两个和等于第三个元素
- 查找四个元素加和成给定值
重要链接:
关于两指针的最新文章
两个指针的练习题
窗户滑动技术
该技术显示了如何将某些问题中的嵌套for循环转换为单个for循环以减少时间复杂度。
- 大小为k的所有子数组的最大值
- 查找具有给定总和的子数组|设置1(负数)
- Anagram子串搜索(或搜索所有排列)
- 计算到达第n个楼梯的方法
- 具有给定总和的大小为k的子数组
重要链接:
推拉窗的实践问题
最近关于窗户滑动的文章
除了这些C++中的STL和Java中的Collection之外,学术上也没有教授过,如果您的程序分别使用C++和Java ,则它们非常重要。
奖励提示:每当您解决问题时,请确保您对其进行了适当的分析。在这里,“分析”与其效率无关,而是“在问题中找到模式”。有一种将问题归为一类模式的实践,这会使您变得更好。这是因为当您再次看到类似的问题时,您的大脑会立即识别出该模式,然后将其拾取并提供给您。这似乎很快,并且使您也有一点自信..祝您编程愉快!!!
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。