在二维数组的查找
来源:互联网 发布:韩语视频翻译软件 编辑:程序博客网 时间:2024/05/17 07:30
/* 法一:直接暴力:O(MN) 从上到下从左到右搜一遍bool Find(vector<vector<int> > array,int target) { for(int i=0; i<array.size(); i++){ for (int j=0; j<array[i].size(); j++){ if(array[i][j] == target) return true; } } return false;}
法二:因为数组从左到右递增,从上到下递增,所以从左下角来看, 从左到右递增,从下到上递减。在搜索时,当前元素比target大时,指针向右移动; 当前元素比target小时,指针向上移动;相等时输出true. 最坏时间复杂度:O(M+N),N×M的矩阵*/bool Find(vector<vector<int> > array,int target) { int i = array.size() - 1; int j = 0; //从左下角开始搜索 while (i>=0 && j<array[i].size()){ if (array[i][j] == target){ return true; }else if (array[i][j] < target){ j++; }else{ i--; } } return false;}
/* 法三:因为每一行都有序,所以对每一行都执行二分查找:O(NlogM),N×M的矩阵*/ bool Find(vector<vector<int> > array,int target) { for (int i=0; i<(int)array.size(); i++){ int low = 0; int high = array[i].size(); int mid = (low+high)/2; while (low < high){ if (target == array[i][mid]){ return true; } if (target<array[i][mid]){ high = mid; }else{ low = mid + 1; } mid = (low + high)/2; } }//for return false;}
/* 法四:二分 http://justjavac.iteye.com/blog/1310178*/ int binsearch(int value, int *a, int n, int m1, int n1, int m2, int n2){ int begin_m1 = m1, begin_n1 = n1, end_m2 = m2, end_n2 = n2; int left_result = 0, right_result = 0; int i = (m1+m2)/2, j = (n1+n2)/2; if (a == NULL) return 0; if (value < *(a+m1*n+n1) || value > *(a+m2*n+n2)) return 0; else if (value == *(a+m1*n+n1) || value == *(a+m2*n+n2)) return 1; while ((i!=m1 || j!=n1) && (i!=m2 || j!=n2)){ if ( value == *(a+i*n+j) ) return 1; else if ( value < *(a+i*n+j) ){ m2 = i; n2 = j; i = (i+m1)/2; j = (j+n1)/2; } else{ m1 = i; n1 = j; i = (i+m2)/2; j = (j+n2)/2; } } //search left & right if ( i<end_m2 ) left_result = binsearch(value, a, n, i+1, begin_n1, end_m2, j); if ( j<end_n2 ) right_result = binsearch(value, a, n, begin_m1, j+1, i, end_n2); if (left_result | right_result ) return 1; else return 0;}
1 0
- 在二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- 二维数组的查找
- ios 获取控件相对屏幕的位置
- 【伪】解决动态id元素无法捕捉自动登录问题
- hdu 5898odd-even number (数位dp 沈阳网络赛)
- USB学习系列之一——USB简介
- cocosCreate 黄金矿工绳索摆动,以及钩子的扔出和回收
- 在二维数组的查找
- unity使用代码修改Texture属性,一键生成精灵
- 字典序问题
- mysql导入数据出现Errcode: 2 - No such file or directory错误信息
- 【R语言】【Rstudio】中文支持
- 浅谈程序猿的职业规划
- opencv2.4.6配置vs2008
- hdu5890(二维01背包+bieset优化)
- python学习之 range,列表生成式与切片