题解:在行列都排好序的矩阵中找指定的数
在行列都排好序的矩阵中找指定的数
http://www.nowcoder.com/questionTerminal/b929be9dbbaa489a91afa3fec195c228
O(n),其他解法未免也太啰嗦了。
j=M-1;
for (int i=0;i<n;++i) {
while (j>0 && val[i][j]>K) --j;
if (val[i][j]==K) {cout<<"Yes"<<endl;return 0;}
}
cout<<"No"<<endl;return 0;
关键点在于不等关系是有传递关系的。 如果一个位置(i,j)的数>K,显然它下边、右边、右下的数一定>K,因此在后边的查询中看都不用看。 当我们按照上往下(i增加)的顺序遍历行时,发现最右侧的列不合法就直接排除就好。
没想到还得补充下时间复杂度…… 第二行for显然是O(n) 第4行while只减不增,for循环全部执行完最多减M次。也是O(n) 故总计O(n)