2次元配列を見つけるために - - pythonの提供を受賞

タイトル説明

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

アイデア

  • 解法暴力配列要素がために、法律に基づいて記憶されているように。 バツ J X_ {I、J} それは持っています バツ - 1 J < バツ J < バツ + 1 J X_ {I-1、J} <X_ {I、J} <X_ {I + 1、J} バツ バツ J - 1 < バツ J < バツ バツ J + 1 X_ {X、J-1} <X_ {I、J} <X_ {X、J + 1} だから、配列を見つけるために整数比較で存在する場合、暴力的な方法の低次元の配列があるとき。
  • 賢い方法:法の存在により、我々はできる探しを開始する2次元配列の左下または右上隅で最小の要素の位置または要素の最大の、からの位置。現在位置の要素が検索の数、列1を加えた数未満である場合、そうでない場合、列プラスワンの数。

    ここに画像を挿入説明

ACコード

メソッドの解決暴力

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        data = array[0]
        # 全部元素
        for i in range(1, len(array)):
            data.extend(array[i])
        
        if target in data:
            return True
            
        return False

賢い方法

# 下三角寻找
# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        if array == None:
            return None
        # 行数和列数
        rows, cols = len(array), len(array[0])
        # 下三角寻找
        row = rows - 1
        col = 0
        while row >= 0 and col <= cols - 1:
            if array[row][col] == target:
                return True
            elif array[row][col] > target:
                row -= 1
            else:
                col += 1
        
        return False

# 上三角寻找
# -*- coding:utf-8 -*-
class Solution:
    def Find(self, target, array):
        # write code here
        if array == None:
            return None
            
        # 行数和列数
        rows, cols = len(array), len(array[0])
        col = cols - 1
        row = 0
        while col >= 0 and row <= rows - 1:
            if array[row][col] == target:
                return True
            elif array[row][col] > target:
                col -= 1
            else:
                row += 1
        
        return False
289元記事公開 ウォンの賞賛103 ビューに20万+を

おすすめ

転載: blog.csdn.net/Forlogen/article/details/104884269