C++笔试题(剑指offer 面试题3 二维数组中查找数)
来源:互联网 发布:中小学创新设计软件 编辑:程序博客网 时间:2024/05/30 04:44
#ifndef F_FIND_WORK_TEST3_ARRAY_20171030_JHASKDFJHASF_H_#define F_FIND_WORK_TEST3_ARRAY_20171030_JHASKDFJHASF_H_#include <stdio.h>/*剑指offer 面试题3二维数组中查找在一个二维维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上都下递增的顺序排序。请完成一个函数,输入这样一个二维数组 和 一个整数,1)判断数组中是否存在这个整数2)如果存在,通过引用返回索引。二维数组格式如下1, 4, 7, 102, 6, 9, 128, 12, 13, 1514, 16, 17, 19方法:将需要查找的数, 与右上角的数作对比,一行,一列的排除,每次缩小查找范围。减少循环次数。*/BOOL FindDataFromArray(int *pArrayData, const int nRows, const int nColumns, const int nFindData, int& nIndex);bool FindDataFromVector(vector<vector<int>> vArray, const int nValue);//测试void F_Test3_Array(){ int nIndex(-1); //二维数组 int nArray[4][4] = {{3,5,6,9}, {7,8,10,12}, {11,13,14,16}, {17,19,20,23}}; BOOL bIsFindData = FindDataFromArray(*nArray, 4, 4, 13, nIndex); //一维数组 int nArray1[] = {3,5,6,9, 7,8,10,12, 11,13,14,16, 17,19,20,23}; BOOL bIsFindData1 = FindDataFromArray(nArray1, 4, 4, 16, nIndex); //不存在 bIsFindData1 = FindDataFromArray(nArray1, 4, 4, 116, nIndex); //容器存储数据,类似于维维数组 vector<vector<int>> vArray; vector<int> vTemp; for(int i=0; i<4; i++) { for(int j=0; j<4; j++) { vTemp.push_back(nArray[i][j]); } vArray.push_back(vTemp); vTemp.clear(); } bIsFindData = FindDataFromVector(vArray, 7);}BOOL FindDataFromArray(int *pArrayData, const int nRows, const int nColumns, const int nFindData, int& nIndex){ BOOL bIsFindData(FALSE); if(pArrayData && (nRows > 0) && (nColumns > 0)) { int nCurData(0); int nCurRow(0); int nCurColumn = nColumns - 1; while((nCurRow < nRows) && (nCurColumn > 0)) { nIndex = nCurRow*nColumns + nCurColumn; nCurData = pArrayData[nIndex]; if(nCurData == nFindData) { bIsFindData = TRUE; break; } else if(nCurData < nFindData) { nCurRow++; } else { nCurColumn--; } } } nIndex = bIsFindData == 0 ? -1: nIndex; return bIsFindData;}bool FindDataFromVector(vector<vector<int>> vArray, const int nFindValue){ if(vArray.empty()) { return false; } bool bIsFindValue(false); int nRow = vArray.size(); int nColumn = vArray[0].size(); int nCurRow(0); int nCurColumn(0); for(; nCurRow<nRow; ) { int nCurData = vArray[nCurRow][nColumn-1]; if(nCurData == nFindValue) { bIsFindValue = true; break; } else if(nCurData < nFindValue) { nCurRow++; } else { nColumn--; } } return bIsFindValue;}#endif//F_FIND_WORK_TEST3_ARRAY_20171030_JHASKDFJHASF_H_
阅读全文
0 0
- C++笔试题(剑指offer 面试题3 二维数组中查找数)
- 剑指offer-面试题3 查找二维数组中的数
- 剑指Offer 面试题3:二维数组中查找
- 剑指Offer 面试题3 二维数组中查找
- 剑指offer 面试题3:二维数组中查找
- 二维数组中的查找(剑指offer面试题3)
- 剑指offer面试题3 二维数组中的查找(c)
- 【剑指offer】面试题3 数组 二维数组的查找
- 剑指offer 面试题3:二维数组(矩阵)中数的查找(leetcode 74. Search a 2D Matrix) 题解
- 【剑指offer】面试题3:二维数组中的查找
- 【剑指offer】面试题3:二维数组中的查找
- 剑指offer 面试题3 二维数组的查找
- 剑指Offer:面试题3 二维数组中的查找
- 剑指offer面试题3二维数组的查找
- 《剑指Offer》面试题3:二维数组中的查找
- 剑指offer面试题3-二维数组中的查找
- 【剑指Offer学习】【面试题3 :二维数组中的查找】
- 【剑指offer】 面试题3: 二维数组中的查找
- c语言printf()输出格式大全
- 蓝桥杯-算法训练-字串统计-Java
- openwrt为我们封装了一些shell函数
- leetcode 4——Median of Two Sorted Arrays
- .net 日志管理
- C++笔试题(剑指offer 面试题3 二维数组中查找数)
- poj1006 Biorhythms
- AH00558: apache2: Could not reliably determine the server's fully qualified domain name
- .net json类
- 文章标题
- 字节流--读取、录入、拷贝文件实例
- 死锁简单例子
- 动态规划--(数字三角形 poj1163)
- 基于Tomcat中间件的系统会话超时设置