剑指offer二维数组中的查找,题目链接如下 http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking class Solution { public: bool Find(vector<vector<int> > array,int target) { bool found = false; if(!array.empty()) { int h = array.size(); int w = array[0].size(); if((target>array[h-1][w-1])||(target<array[0][0])) return found; int i = 0, j = w-1; while((j>=0)&&(i<h)) { if(array[i][j]==target) { found = true; break; } else if(array[i][j]>target) j--; else i++; } } return found; } };   问题,提交的代码有段错误。 (在本机的GCC GNU 编译器可以通过) 1.猜想可能是,没有考虑数组为空的case。 添加相应的代码以后还是出现了段错误的问题。 2.猜想可能是数组越界 反复查看代码,没有看出来在数组宽和高 3.尝试提交代码的一部分,从答案错误一直提交到段错误。 出现多错误问题的代码锁定在这一部分 while((j>=0)&&(i<h)) { if(array[i][j]==target) { found = true; break; } else if(array[i][j]>target) j--; else i++; } 4.修改代码。发现如下情况 当把while循环里的内容改成 while(i<h&&j>=0) { bool ife = (array[i][j]==target); i++; } 或者 while(i<h&&j>=0) { bool ife = (array[i][j]==target); j--; } 都只是出现答案错误 可是当改变部分如下的代码提交时出现段错误 while(i<h&&j>=0) { if(target==array[i][j]) { return true; } i++; } 不清楚为什么一添加了return语句或者用一个变量保存的false值改变成true值就会出现段错误。 写break语句也只是答案错误。 提交了50多遍了,测了一个早上。暂时不清楚也找不到问题在哪。 管理员有空帮忙看看这个问题呀
点赞 1

相关推荐

不愿透露姓名的神秘牛友
07-11 11:00
点赞 评论 收藏
分享
05-19 15:21
已编辑
门头沟学院 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务