解决问题的常用方法是使用循环逐步构建解决方案。 此方法有几种变体:
以输入为中心的策略:在这种方法中,我们一次处理一个输入,并在循环的每次迭代中构建部分解决方案。
以输出为中心的策略:使用这种方法,我们一次向解决方案添加一个输出,并以迭代方式构建解决方案的各个部分。
迭代改进策略:这涉及从一些易于访问的近似解决方案开始,然后不断改进它们,直到达到最终解决方案。
还有几种基于循环的方法:使用单个循环和变量,使用嵌套循环和变量,将循环增加一个常量(大于 1),使用循环两次(双遍历),使用单个循环和前缀数组(或额外内存)等。
罗马数字到整数。
阵列中的领导者。
有效的山体形成。 菲茨巴兹问题。
插入、冒泡和选择排序。
查找数组中的最大值和最小值。
对波形中的数组进行排序。
数组的平衡索引。
查找您自己以外的产品。
将矩阵旋转 90 度。
矩阵的螺旋遍历。
查找具有最大行数的行。
递减策略涉及通过找到子问题的解决方案来解决问题。 这通常会导致递归算法将问题分解为更小的输入大小,并继续这样做,直到达到基本情况。
GCD 的欧几里得算法。
二叉搜索算法。
约瑟夫斯问题。
在二叉搜索树中搜索。
插入二叉搜索树。
在二叉搜索树中删除。
快速选择算法找到最小的第 k 个。
当数组具有某种顺序属性(例如排序)时,可以使用二分法搜索的思想来有效地解决搜索问题。 通过这种方法,我们可以在 o(logn) 时间复杂度内找到一个解决方案。
要使用二叉搜索,我们需要根据问题的具体情况修改标准的二叉搜索算法。 核心思想是计算中间索引并遍历数组的左半部分或右半部分。
求整数的平方根。
在 rotation-sort 数组中搜索。
数组中的固定点。
搜索排序的 2D 矩阵。
排序数组的中位数。
对数组中元素的第一个和最后一个位置进行排序。
在增量或减法数组中查找最大值。
分而治之的策略包括将一个问题分解为多个子问题,解决每个子问题,然后将它们的解决方案组合起来,以获得原始问题的解决方案。 这种方法可以成为解决 DSA 中许多基本问题的有效方法。
通过将问题划分为更小的部分,可以更轻松地单独解决每个部分,然后将解决方案组合在一起,从而获得整个问题的最终解决方案。
合并排序算法。
快速排序算法。
最大子阵列总和的分而治之的解决方案。
找到数组中最大差异的分而治之的解决方案。
求数组中最大值和最小值的分而治之。
分而治之,为数组中的大多数元素找到解决方案。
分而治之以构建分段树的想法。
优质作者名单