剑指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多遍了,测了一个早上。暂时不清楚也找不到问题在哪。
管理员有空帮忙看看这个问题呀