每日一刷 劍指offer 一 二維陣列中的查詢

2021-09-16 22:35:16 字數 1413 閱讀 8187

為提公升coding能力,開啟每日一刷,每天至少完成1道題目,並將自己的總結思考記錄於此。

題目:在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

嘗試解法:暴力求解直接遍歷二維陣列兩次

# -*- coding:utf-8 -*-

class solution:

# array 二維列表

def find(self, target, array):

# write code here

#兩次迴圈

for row in range(len(array)):

#先從行查詢

arr = array[row]

for col in range(len(array[0])):

#再從列查詢

if arr[col] == target:

return true

return false

改良解法:因為二維陣列有規律,行從左往右遞增,列從上往下遞增;則可以從陣列左下角的數字開始查詢,如果目標值大於該數字則排除這個數字所在的列;如果該數字小於要查詢的數字,排除這個數字所在的行;以此縮小查詢範圍,直至達到邊界範圍。

舉例:二維陣列如下圖所示,目標值小於左下角數字6,刪除6所在的行然後向上查詢;目標值大於6,刪除6所在的列然後向右查詢,以此類推。最終找到目標值則返回true,否則返回false。

#從左下角開始查詢(也可以從右上角開始,與此相反:i+=1;j-=1)

# -*- coding:utf-8 -*-

class solution:

# array 二維列表

def find(self, target, array):

# write code here

rows = len(array) - 1 #行

cols= len(array[0]) - 1 #列

i = rows

j = 0

while j<=cols and i>=0:

if targetarray[i][j]:

j += 1

else:

return true

return false

c++:

class solution 

return false;}};

19/04/0

劍指offer一刷 查詢演算法

難度 簡單 class solution return 1 時間複雜度 o n 空間複雜度 o n 遍歷陣列並通過交換操作,使元素的索引與值一一對應 即 nums i i 遍歷中,第一次遇到數字 x 時,將其交換至索引 x 處 而當第二次遇到數字 x 時,一定有 nums x x,此時即可得到一組重...

劍指offer 一 二維陣列的查詢

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。第一種方法,在每一行進行二分查詢,nlogn。第二種方法,也可能是最好的,因為已經是有序的,我們選取左下角或者右上角,每次進行判斷大小...

劍指offer每日一刷 2023年11月20日

題目名稱 矩形覆蓋 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?從題目描述可知,這也是一道斐波那契數列的題目 f n f n 1 f n 2 題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個...