為提公升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個...