题解:在行列都排好序的矩阵中找指定的数

在行列都排好序的矩阵中找指定的数

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)

全部评论
从对角线上找啊,确定两个相连数使k介于两者之间,然后找下大数所在行和列就o了
2 回复 分享
发布于 2022-01-08 11:49
你这时间复杂度多少
点赞 回复 分享
发布于 2021-08-06 21:46
这不o(n²)吗?
点赞 回复 分享
发布于 2021-09-15 10:25
点赞 回复 分享
发布于 2022-03-09 11:54

相关推荐

评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务