美文网首页
二维数组中的查找

二维数组中的查找

作者: gaookey | 来源:发表于2020-11-23 19:23 被阅读0次

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的个二维数组和一个整数,判断数组中是否含有该整数。

    选取数组中右上角的数字(也可以选取左下角的数字)。如果该数字等于要查找的数字,则査找过程结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,,则剔除这个数字所在的行。也就是说,如果要査找的数字不在数组的右上角,则每一次都在数组的査找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者査找范围为空。

    func find(matrix: [[Int]], number: Int) -> Bool {
        guard !matrix.isEmpty,
              let columns = matrix.max(by: { $0.count < $1.count })?.count
        else { return false }
        
        var b = true
        matrix.forEach { numbers in
            if numbers.count != columns {
                b = false
            }
        }
        if !b {
            return false
        }
        
        let rows = matrix.count
        var row = 0
        var column = columns - 1
        
        while row < rows, column >= 0 {
            if matrix[row][column] == number {
                return true
            } else if matrix[row][column] > number {
                column -= 1
            } else {
                row += 1
            }
        }
        
        return false
    }
    

    摘抄资料:《剑指offer》

    相关文章

      网友评论

          本文标题:二维数组中的查找

          本文链接:https://www.haomeiwen.com/subject/cubviktx.html