一道做智慧型的對話機械人公司的演算法測試題
有乙個矩形的水槽被分為了 n * m 個格仔,每個格仔內的高度都不同,每個格仔和直接相鄰的格仔相通(對角相鄰的不相通)。從最左上角的格仔注入水,水會向相通的較低的或同樣高的格仔流動,但不會流向較高的格仔。請寫程式計算水一共會流經多少個格仔?
例如如果格仔高度如下分布:
3 | 5 | 1
---------
2 | 1 | 5
---------
4 | 2 | 1
則水會從左上角流經 3、2、1 三個格仔,答案為 3。
3 | 5 | 1
---------
2 | 1 | 5
---------
4 | 2 | 1
3
[[0,0]]
3 2
[[0,0],[1,0]]
↑
3 2 1
[[0,0],[1,0],[1,1]]
↑
5 | 5 | 1
---------
2 | 1 | 5
---------
4 | 2 | 1
5
[[0,0]]
5 5 2
[[0,0],[0,1],[1,0]]
↑5 5 2 1 1
[[0,0],[0,1],[1,0],[0,2],[1,1]]
↑5 5 2 1 1
[[0,0],[0,1],[1,0],[0,2],[1,1]] [1,1] 已存在,跳過
↑5 5 2 1 1
[[0,0],[0,1],[1,0],[0,2],[1,1]]
↑5 5 2 1 1
[[0,0],[0,1],[1,0],[0,2],[1,1]]
↑
class solution:
def printgridnumber(self, height_arr):
def judge_contain(key, queue):
for x in queue:
if x == key:
return true
return false
xlen = len(height_arr)
ylen = len(height_arr[0])
if i - 1 >= 0 and height_arr[i - 1][j] <= height_arr[i][j] and not judge_contain([i - 1, j], queue):
if j - 1 >= 0 and height_arr[i][j - 1] <= height_arr[i][j] and not judge_contain([i, j - 1], queue):
if i + 1 < xlen and height_arr[i + 1][j] <= height_arr[i][j] and not judge_contain([i + 1, j], queue):
if j + 1 < ylen and height_arr[i][j + 1] <= height_arr[i][j] and not judge_contain([i, j + 1], queue):
queue = [[0, 0]]
for x in queue:
# print(queue)
return len(queue)
if __name__ == '__main__':
solution = solution()
height_arr = [[3, 2, 1], [3, 2, 1], [2, 3, 1]]
print(solution.printgridnumber(height_arr))
[[3, 5, 1], [2, 1, 5], [4, 2, 1]] # input
3 # expect value
[[5, 5, 1], [2, 1, 5], [4, 2, 1]]
5[[3, 2, 1], [3, 2, 1], [3, 2, 1]]
9[[3, 2, 1], [3, 2, 1], [2, 3, 1]]
8[[6, 3, 4, 2], [5, 4, 4, 1], [3, 3, 2, 1]]
12
class solution:
def printgridnumber(self, height_arr):
def judge(i, j):
left_top_height = height_arr[0][0]
xlen = len(height_arr)
ylen = len(height_arr[0])
if i - 1 >= 0 and left_top_height >= height_arr[i - 1][j] >= height_arr[i][j]:
return true
if j - 1 >= 0 and left_top_height >= height_arr[i][j - 1] >= height_arr[i][j]:
return true
if i + 1 < xlen and left_top_height >= height_arr[i + 1][j] >= height_arr[i][j]:
return true
if j + 1 < ylen and left_top_height >= height_arr[i][j + 1] >= height_arr[i][j]:
return true
return false
if len(height_arr) == 0:
return
if len(height_arr[0]) == 0:
return
left_top_height = height_arr[0][0]
# print(left_top_height)
number = 1
for i in range(len(height_arr)):
for j in range(len(height_arr[0])):
if i == 0 and j == 0:
continue
if height_arr[i][j] <= left_top_height and judge(i, j):
number += 1
return number
if __name__ == '__main__':
solution = solution()
height_arr = [[3,5,1],[2,1,5],[4,2,1]]
print(solution.printgridnumber(height_arr))
一道演算法題
兩個燒杯,乙個放糖乙個放鹽,用勺子舀一勺糖到鹽,攪拌均勻,然後舀一勺混合 物會放糖的燒杯,問你兩個燒杯哪個雜質多?一樣多吧 對的 為啥?是不是因為 糖和鹽本來就是均勻的 因為,就算不攪拌均,你放一勺過去,那邊放一勺不含雜質的過來,那麼都是一勺雜之 如果攪拌均勻的話也是一樣 小依 21 45 32 也...
一道演算法題
1.上午主要做了對翻譯任務的劃分,下午把 翻譯完畢。2.明天要講的演算法題 對乙個集合,求出其連續元素組成的子集中,和最大的子集 我對這道題的理解是 1 若集合中最小值大於0,意味著所有的都大於0,則最大的子集和,為所有值加起來 2 若集合中最大值小於0,意味著所有的都小於0,則最大的子集和,為集合...
一道演算法題
include using namespace std const int size 5 int max sub array const int a,int n,int m int max matrix const int a size int row,int col,int subsize int...