题解 | #数字在升序数组中出现的次数#

二维数组中的查找

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

public class Solution {
    
    /**
     * 二维数组中的查找
     * 要求空间复杂度o(m + n)
     * 思路:
     * 如果从左上角或者右下角的元素开始遍历 那么它所在的行列其他元素都是比它大或者比它小的不好舍弃
     * 所以我们选择从左下角或者右上角开始
     * 例如:从左下角开始
     * 1. 如果元素大于目标元素,那么所在行都比目标元素大行上移 舍弃一行
     * 2. 如果元素小于目标元素,那么所在列都比目标元素小 列右移舍弃一列
     * 3. 这样做到了遍历了所有元素
     * @param target
     * @param array
     * @return
     */
    public boolean Find(int target, int [][] array) {
        // 行
        int i = array.length - 1;
        // 列 列数 array[0].length
        int j = 0;
        while (i >= 0 && j < array[0].length){
            if(target == array[i][j]) return true;
            // 当前元素大于目标元素 舍弃行
            else if(target < array[i][j]) i--;
            // 当前元素小于目标元素 舍弃列
            else if(target > array[i][j]) j++;
        }
        return false;
    }
}
全部评论

相关推荐

头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
11-09 11:01
济南大学 Java
Java抽象带篮子:外卖项目真得美化一下,可以看看我的详细的外卖话术帖子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务