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增加)的顺序遍历行时,发现最右...