剑指第四题:二维数组中的查找
2018-03-05 15:31
134 查看
/* 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 */ /***************** 二维数组中的查找 递增 按行遍历 ******************/ class Solution { public: bool Find(int target, vector<vector<int> > array) { if(array.empty()) return 0; int lin = array.size(); for(int i=0;i<lin;i++){ int col = array[i].size(); if(!col) continue; else if(target >= array[i][0]){ if(target <= array[i][col-1]){ for(int j=col-1;j>=0;j--){ if(target == array[i][j]) return 1; else if(target > array[i][j]) break; } } } else continue; } return 0; } }; /***************** 二维数组中的查找 递增 按列遍历 ******************/ class Solution { public: bool Find(int target, vector<vector<int> > array) { if(array.empty()) return 0; int lin = array.size(); int col = array[0].size(); for(int j=col-1;j>=0;j--){ if(target >= array[0][j]){ for(int i=0;i<lin;i++){ if(target == array[i][j]) return 1; else if(target < array[i][j]) break; } } else continue; } return 0; } }; /***************** 二维数组中的查找 递增 行列 综合循环 左下角开始 ******************/ class Solution { public: bool Find(int target,vector<vector<int> > array) { int rowCount = array.size(); int colCount = array[0].size(); int i,j; for(i=rowCount-1,j=0;i>=0&&j<colCount;) { if(target == array[i][j]) return true; if(target < array[i][j]) { i--; continue; } if(target > array[i][j]) { j++; continue; } } return false; } }; /***************** 二维数组中的查找 递增 行列 综合循环 右上角开始 ******************/ class Solution { public: bool Find(int target,vector<vector<int> > array) { int row = array.size(); int col = array[0].size(); int i,j; for(i=0,j=col-1;i<row&&j>=0;){ if(target < array[i][j]) { j--; continue; } else if(target > array[i][j]){ i++; continue; } else return 1; } return 0; } }; /***************** 二维数组中的查找 递增 二分法 O(nlogn) ******************/ class Solution { public: bool Find(int target, vector<vector<int> > array) { if(array.empty()) return 0; int lin = array.size(); for(int i=0; i<lin; i++){ int start=0,end=array[i].size()-1; if(!end) return 0; while(end>=start) { int mid = ((end-start)>>1) + start; if(target > array[i][mid]) start = mid + 1; else if(target < array[i][mid]) end = mid -1; else return 1; } } return 0; } }; 二维数组的两个参考练习 http://blog.csdn.net/a819825294/article/details/52088732 http://blog.csdn.net/hou09tian/article/details/70889235
相关文章推荐
- 【剑指offer】 第四题:二维数组中的查找
- 剑指Offer面试题:2.二维数组中的查找
- 牛客网_剑指offer_二维数组中的查找
- 【剑指offer】-二维数组中的查找
- 【剑指offer】面试题3 数组 二维数组的查找
- 【newCoder】剑指Offer_编程题 二维数组中的查找
- 剑指offer[一]:二维数组中的查找(java和c++版本)
- 【剑指offer】1.二维数组查找
- 剑指OFFER:二维数组中的查找
- 【剑指offer】二维数组中的查找☆
- [剑指offer-1384] 二维数组中的查找
- [剑指Offer]二维数组中的查找
- 牛客网-剑指Offer-二维数组的查找
- 剑指Offer面试题3:二维数组中的查找Java版解法
- 剑指offer-有序二维数组中的查找
- 剑指offer(三)之二维数组中的查找
- 剑指offer面试题 二维数组的查找
- 【剑指offer】面试题4:二维数组的查找
- 剑指Offer面试题3[二维数组中的查找]
- 剑指offer-算法题练习:part1 二维数组中的查找(数组)