在2D数组中,局部最大值可以定义为这样一个值,即其4个相邻元素都小于或等于它,换句话说,对于 a[i][j]
这个元素,它需要满足以下条件才能成为局部最大值:
a[i+1][j] <= a[i][j]
&& a[i-1][j] <= a[i][j]
&& a[i][j+1] <= a[i][j]
&& a[i+1][j-1] <= a[i][j]
我被要求在给定的2D数组中找到所有局部最大值。
最朴素的方法是遍历所有元素,并检查每个元素是否为局部最大值。这将是O(n^2)的复杂度。尽管我的朋友坚称应该存在一个渐进更好的算法,但我认为你不能做得比这更好。有任何提示吗?
我考虑了分治的思路,但我感觉不可能在不遍历所有数字的情况下检测到所有局部最大值,这必然是O(n^2)的复杂度。我是对还是忽略了什么?