今天我接受了采访,并被问到这个问题!

对MS Paint程序进行编码。 N * N像素区域。给定像素和颜色,请将像素的颜色更改为所需的颜色,如果相邻像素的颜色相同,则也将其更改。

我通过说我将采用n * n数组来进行处理,并将检查给定的像素并移至相邻像素。例如给定的像素为x,yi将首先检查数组中x,y的颜色,然后查找(x + 1,y + 1),(x + 1,y),(x,y + 1) ),(x-1,y),(x-1,y-1)....

但是面试官并不高兴有人可以用更好的算法来建议我另一种方法..它具有更好的时空复杂性!

最佳答案

面试官可能正在要求充水,而采用如此简单的方法是无法做到的。

如果这是洪水填充,则对角线不会算作相邻的对角线。

最简单的泛洪填充是对数组上每个相邻像素的递归调用。在大型网格上使用简单的方法很可能会用完堆栈。

正确的方法是使开始位置入队,然后出队,检查像素颜色是否仍是源颜色,并在扫描时扫描左右填充,并入队上下所有像素。继续直到队列耗尽。

关于algorithm - MS面试代码要求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9524583/

10-11 22:59