二维数组中的查找(牛课网)
来源:互联网 发布:佳能应用程序软件 编辑:程序博客网 时间:2024/06/05 20:46
二维数组中的查找(牛课网):
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解法一(二分):
从第一列用二分法选出所有小于等于target的行,然后分别对这些行进行二分法遍历。要注意对边界条件的排除,如array为NULL或者vector[0]为NULL。下面是我的代码:
class Solution {public: bool Find(int target, vector<vector<int> > array) { if(array.size() == 0 || array[0].size()==0) return false; int rows = array.size(); int clos = array[0].size(); int left = 0, right = rows-1; int mid; while(left <= right){ mid = ( left + right )/2; if(array[mid][0] <= target){ left = mid+1; }else{ right = mid-1; } }//after this while circulation, mid and below mid index is that all array[index][0] <= target; int rowIndex = mid; for(int i=rowIndex; i>=0; i--){ left = 0; right = clos - 1; while(left <= right){ int mid = (left + right)/2; if(array[i][mid] == target){ return true; }else if(array[i][mid] > target){ right = mid -1; }else{ left = mid +1; } } } return false; }};
我的经验:二分法中,要求mid=(start + end)/ 2,当start==end-1或者start==end时,mid=(start+end)/ 2 的结果都是mid=start。及二分法具有向左偏移的性质。所以二分法这种经典算法要熟记于心。
解法二(最优):从左下角或右上角开始,当array[i][j]<target时,要j++,反之要i--;因为这样移动不像左上角,在左上角向下移动和向右移动都会增大,不具有分支性。下面是最优的代码:
class Solution {public: bool Find(int target, vector<vector<int> > array) { if(array.size() == 0 ) return false; if(array[0].size() == 0) return false; int rows = array.size(); int clos = array[0].size(); int i = clos-1; int j = 0; while(i>=0 && j<rows){ if(array[j][i] == target) return true; else if(array[j][i] > target){ i--; }else{ j++; } } return false; }};
1 0
- 二维数组中的查找(牛课网)
- 二维数组中的查找(数组 查找)
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 二维数组中的查找
- 131. Palindrome Partitioning
- 文章标题
- Git详解之九:Git内部原理
- 大整数乘法以及空间性能优化
- 信息隐藏课程之简单的LSB最低位隐写
- 二维数组中的查找(牛课网)
- linux内核学习:内核链表
- javascript中apply、call和bind的区别
- LoadLibrary无法加载DLL解决思路
- 斐波那契数列的递归实现和非递归实现
- 108. Convert Sorted Array to Binary Search Tree
- 链表的操作
- Android 修改用户图像笔记
- 重载_,“+, -, --, ++”运算符