牛客網劍指offer第一題,二維陣列的查詢,原位址在這裡
想要聯練習的小夥伴可以去練習練習。
題目:在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
這道題對python來說,只需要target in array就可以了,但是邏輯能力和資料結構能力得不到提示。下面記錄一下思路,截圖取自劍指offer這本書,還是挺推薦購買正版的。
假設陣列是[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]],需要發現7這個數字,先從右上角9開始,如果9大於target,則不考慮9這一列;如果9小於target,則不考慮9這一行,如下截圖所示
下面上**,按照邏輯思路來寫的,可能空間以及變數不是利用的最好
# -*- coding:utf-8 -*-
'''#****************************************
劍指offer二維陣列查詢
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
#****************************************
'''class solution:
# array 二維列表
def find(self, target, array):
row = len(array) #返回陣列的行數
col = len(array[0]) #返回陣列的列數
row_i = 0
col_i = col-1
result = false
while(col_i >= 0 and row_i < row):
if array[row_i][col_i] > target: #右上角大於目標,列減一
col_i = col_i - 1
elif array[row_i][col_i] < target: #右上角小於目標,行加一
row_i = row_i + 1
else:
result = true
break
return result
# write code here
while true:
try:
s=solution()
# 字串轉為list
l=list(eval(raw_input()))
array=l[1]
target=l[0]
print(s.find(target, array))
except:
break
然而對python來說,這道題其實很簡單,python提供的強大的內建函式,下面是牛客網 網友的解答
# -*- coding:utf-8 -*-
class solution:
# array 二維列表
def find(self, target, array):
# write code here
n=len(array)
flag='false'
for i in range(n):
if target in array[i]:
flag='true';
break
return flag
while true:
try:
s=solution()
# 字串轉為list
l=list(eval(raw_input()))
array=l[1]
target=l[0]
print(s.find(target, array))
except:
break
牛客網練習30
眾所周知,小k是nowcoder的 苟管理,所以小k很擅長踢樹,雖然本題與踢樹無關 小k喜歡將日期排列成yyyy mm dd的形式 位數不足添零補齊 的形式,雖然這與小k只會做回文字串這道水題無關,但小k覺得日期組成的回文串也是挺可愛的。作為乙個涼心出題人,小k決定給你乙個可愛的問題 給你兩個日期,...
牛客網專項練習(七)
1 以下哪個資料結構不是多型資料型別 正確答案 d 棧廣義表有向圖字串分析 多型就是資料元素的型別不確定,字串的每個元素始終都是字元 char 而不會是別的型別。比如棧可以是整數棧 字元棧 物件棧等等。但是字串,它的元素必然是字元。2 以下資料結構中,是非線性資料結構 正確答案 a 你的答案 a 正...
牛客網提高五練習
吉老師的題,出的很有水平 應該是t1,t2難度 給出 l1,l2,r1,r2,m 詢問 displaystyle sum sum m i oplus j 對於前 30 分,我們可以簡單列舉 對於第二個點,我們已知乙個數 顯然對於 10 的資料範圍,我們只能考慮 o 1 或者 o logn 的演算法 ...