KW53/20刷题总结:使用Python-二分法—— x的平方根、搜索二维矩阵

第一题:x的平方根,实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

  1. 思路:在学习二分法,用二分法解决这个问题。这是last position问题。
    代码如下:
class Solution:
    def mySqrt(self, x: int) -> int:
        start = 1
        end = x
        while start + 1 < end:
            mid = start + (end - start) // 2
            if mid * mid == x:
                start = mid
            elif mid * mid < x:
                start = mid
            else:
                end = mid
            
        if end * end <= x:
            return int (end)
        return int (start)

第二题:搜索二维矩阵,编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

  1. 思路:在学习二分法,用二分法解决这个问题。该矩阵是严格递增的,将二维矩阵转为一维数组来解决,处理起来比较方便。
    代码如下:
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        start = 0
        row = len(matrix)
        column = len(matrix[0])
        end = row * column - 1
        while start + 1 < end:
            mid = start + (end - start) // 2
            number = matrix[mid // column][mid % column]
            if number == target:
                return True
            elif number < target:
                start = mid
            else:
                end = mid
        if matrix[start // column][start % column] == target:
            return True
        if matrix[end // column][end % column] == target:
            return True

        return False

你可能感兴趣的:(Coding练习,二分法,python,算法)