知識點:二維數組
最容易想到的思路,行列雙重遍歷查找
# -*- coding:utf-8 -*-
class Solution:
# array 二維列表
def Find(self, target, array):
# write code here
for row in array:
for num in row:
if num == target:
return True
return False
使用這種方法所用的時間和內存:
書上給出的解法,從右上角開始找:
if num > target: 去除該列(左移一位)
if num < target: 去除該行(下移一位)
class Solution:
# array 二維列表
def Find(self, target, array):
# write code here
if not array:
return False
row_num = len(array) # 行數
col_num = len(array[0]) # 列數
# 右上角元素
i = 0 # 第一行
j = col_num - 1 #最後一列
while i <= row_num - 1 and j >= 0:
if array[i][j] > target:
j -= 1 # 左移
elif array[i][j] < target:
i += 1 # 下移
elif array[i][j] == target:
return True
return False
試從左下角找,思路相似:
if num < target: 去除該列(右移一位)
if num > target: 去除該行(上移一位)
class Solution:
# array 二維列表
def Find(self, target, array):
# write code here
if not array:
return False
row_num = len(array) # 行數
col_num = len(array[0]) # 列數
# 左下角元素
i = row_num - 1 # 最後一行
j = 0 # 第一列
while i >= 0 and j <= col_num - 1:
if array[i][j] > target:
i -= 1 # 上移
elif array[i][j] < target:
j += 1 # 右移
elif array[i][j] == target:
return True
return False