ブラシは、問題のレコードの安全性の提供二次元配列を証明して下さい

1タイトル説明

(同一の各一次元アレイの長さ)は、上から下に増加する順に、二次元アレイの各列をソートし、ソート昇順の順に左から右へ、各行。完全な機能は、そのような二次元アレイと整数を入力し、配列の整数が含まれているか否かが判断されます。

2暴力的な問題解決

2.1分析

見つかった場合は、配列を1つずつが、それはtrueを返す、配列全体が、それはfalseを返し、見つからない検索。

2.2コード

class Solution:
    # array 二维列表
    def Find(self, target, array):
        for i in array:
            for j in i:
                if j == target:
                    return True
        return False

2.3複雑

時間計算: ザ・ n個 2 ) O(N ^ 2)
宇宙の複雑さ: O ( 1 ) O(1)

探し始めるための右上隅から3

3.1分析

条件は、配列が左から右に増分され、上から下へインクリメント与えられ、
行最大値の各行の一番右の要素であること;
分析は:
この値は、ターゲットに等しい、trueを返し、
この値は以下の標的よりも、除外します1行下の行、;
この値が目標よりも大きい場合、列は除外され、左;

3.2コード

class Solution:
    # array 二维列表
    def Find(self, target, array):
        rows = len(array)
        cols = len(array[0])
        
        i = 0
        j = cols - 1
        while i<rows and j>=0:
            if array[i][j] == target:
                return True
            elif array[i][j] < target:
                i = i + 1
            elif array[i][j] > target:
                j = j - 1
        return False

3.3複雑

時間の複雑さ:O(行+ colsの)
複雑スペース:O(1)

公開された38元の記事 98ウォンの賞賛 ビュー360 000 +

おすすめ

転載: blog.csdn.net/xijuezhu8128/article/details/104675020