判断关键字是否在行和列分别递增的矩阵中

1310阅读 0评论2014-11-05 mizhouli
分类:C/C++

问题:
 矩阵matrix的行和列都是非递减,给一个关键字key,判断是否在矩阵中。

思路:
  1. matrix的行和列分别非递减,key与matrix右上角的元素比较。
    case1:    相等,返回在矩阵;
    case2:    key < matrix右上角元素,去除最后一列;
    case3:    key > matrix 右上角元素,去除首行;
  2. 不断循环。

算法:


点击(此处)折叠或打开

  1. int qry_in_sorted_matrix(int *m, int rows, int cols, int key) {
  2.     int r = 0, c, result = 0;
  3.     if(m == NULL || rows <= 0 || cols <= 0) {
  4.         return 0;
  5.     }
  6.     
  7.     c = cols - 1;
  8.     while(r < rows && c >= 0) {
  9.         if(key == m[r * cols + c]) {
  10.             result = 1;
  11.             break;
  12.         }
  13.         if(key > m[r * cols + c]) {
  14.             r++;
  15.         } else {
  16.             c--;
  17.         }
  18.     }
  19.     
  20.     return result;
  21. }

 



上一篇:没有了
下一篇:连续子数组和的最大值