题解 | #二维数组中的查找#

二维数组中的查找

http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

突破二维数组解题惯性思维

链接原始思路

由于此二维数组中的数值分布存在左边小,下边大的规律。因此可以采用二分查找的思想,通过target和中间值的大小比较结果排除一半的值,进而缩小比较范围。

错误尝试——双重循环

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        if(array.size()==0) return false;
        for(int i = 0;i<array.size();){
            for(int j = array[i].size()-1;j>=0;){
                if(target==array[i][j]) return true;
                else if(target<array[i][j]){
                    j--;//向左走
                    continue;
                }
                else if(target>array[i][j]){
                    i++;//向下走
                    break;
                }
            }
        }
        return false;
     }
};

我刚开始以为错误在于break关键字一经执行,内层循环的j值就会销毁,等到再进行内层循环的时候j就会从array.size()-1重新开始。总而言之,j并非一个全局变量。

但是我又尝试把i、j设置为全局变量、并把循环的初始条件删掉。如下:

int i=0,j = array[0].size()-1;
        for(;i<array.size();){
            for(;j>=0;)

但是还是不行。

调试了一下,终于发现问题所在—————内层循环退出之后并不默认外层循环也退出。 就算break内存循环退出之后外层循环也不会退出,因此会陷入一个死循环,报错超时。

清爽的while循环

双层循环的意义就在于判断i、j的取值范围。直接采用while单层循环进行判断即可。

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        if(array.empty()||array[0].empty()) 
            return false;
        int n = array.size();
        int row = 0,col = n-1;
        while((row<n)&&(col>=0)){
            if(array[row][col]==target) return true;
            else if(array[row][col]>target) col--;
            else if(array[row][col]<target) row++;
        }
        return false;
    }
};
全部评论

相关推荐

04-30 21:35
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务