Amazon Coding Interview: Count Negative Integers in Matrix

今天在Youtube上看到这么一道题, 我之前肯定是有见过的,但是忘了是怎么做的。

Count Negative Integers

Array is sorted.

例子:

 [-3, -2, -1, 1]  -->3

[-2, 2, ,3,, 4] -->1

[4,  5 , 7,  8] -->0

一共4 个。

O(nm) is naive solution

最暴力的解法就是整个matrix走一遍,看看一共几个non-negative numbers.

注意Each row/col is sorted.

我本来的优化想法是每一行横着走,看到第一个non-negative 停下来去下一行。但是这个做法没有利用到col sorted 的用处。

视频里的solution是从第一行的最后一个元素开始走,直到碰到倒数第一个negative number.这时候,马上切换到下一行。如果这个数字是个负数,继续切换到下一行,知道col上我们到达一个non-negative number,这时候再往左边开始走。 这个解法的核心是,由于matrix已经排序好了,所以在row上,碰到了倒数第一个negative后,我们知道这个数的左边全部是negative,不用再看了。 在col上,碰到第一个non-negative后,我们知道col再往下同一个col不会再出现negative了,这个时候就应该往左开始走。【*注: 我们往next-col走的前提是,我们在这个row发现了第一个negative number, 这样我们既可以添加上 这一行的negative 数量, 又可以跳到下一行。 如果row上连第一个negative number都没找到,我们立刻就到下一个col也没什么意义,因为下一个col这个位置由于sort也是正数】


count = col+1 这个太恐怖了。。。我本来还想拿col 去减left most col. 但是这特么不就是col-0+1=col+1吗。。

知道了算法,大部分人也许还是会写一个double loop。但是optimal应该用一个loop就可以解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容