在[m,n]的矩陣中,只有1,0元素。定義相鄰包括:上,下,左,右,左上,左下,右上,右下八個點,求連通區域的數量,以及最大連通區域中元素1的個數。
import sys
a = sys.stdin.readline().strip().split(',')
m = int(a[0])
n = int(a[1])
d =
num =
pp =
for i in range(m):
a = sys.stdin.readline().strip().split(',')
flag = #記錄點是否被訪問過
for i in range(m):
p = [0]*n
############################################
deffun
(d,i,j):
if i>=m or j>=n or i<0
or j<0:
return
0if d[i][j] =='0'
or flag[i][j] ==1:
return
0global count
count += 1
flag[i][j] = 1
fun(d, i - 1, j - 1)
fun(d, i - 1, j)
fun(d, i - 1, j + 1)
fun(d, i, j - 1)
fun(d, i, j + 1)
fun(d, i + 1, j - 1)
fun(d, i+1, j)
fun(d, i + 1, j + 1)
############################################
for i in range(m):
for j in range(n):
if d[i][j] == '1'
and flag[i][j] == 0:
count = 0
fun(d, i, j)
print(len(num), end=',')
print(max(num))
為了提高文字質量…求眾多區間合併,相當於求多個區間的並集def
fun(data):
data = sorted(data)
result =
index = 0
for i in range(1,len(data)):
if data[i-1][1] >= data[i][0]:
continue
index = i
return result
data = [[11,12],[8,10],[1,4],[2,8]]
print(fun(data))
抽牌遊戲,每張拍有(x,y),a,b分別抽,a(x)代表a手裡所有牌x的和,b(x)代表b手裡所有牌x的和。求a(x)==b(x)時,a(y)+b(y)的最大值,括號中:buf[i]代表x[j] a、b都不拿;buf[i-x[j]]代表 a 拿x[j];buf[i+x[j]]代表 b 拿x[j]。def
fun(data):
n = len(data)
x =
y =
for i in data:
sum_x = sum(x)
buf = [-float('inf')] * (2 * sum_x + 1)
buf[sum_x] = 0
num = len(buf)
for i in range(n):
b = buf.copy()
for j in range(num):
if j + x[i] < num:
buf[j] = max(b[j], b[j + x[i]] + y[i])
if j - x[i] >= 0:
buf[j] = max(buf[j], b[j - x[i]] + y[i])
return buf[sum_x]
a = [[3, 1], [2, 2], [1, 4], [1, 4]]
print(fun(a))
def
fun(a,b):
n = len(a)
num = 0
for i in range(n):
left = i
right = n-1
while left <= right:
mid = left + (right - left)//2
if max(a[i:mid+1]) >= min(b[i:mid+1]):
right = mid - 1
else:
left = mid + 1
if max(a[i:mid+1]) < min(b[i:mid+1]):
num += mid - i + 1
else:
num += mid - i
return num
a = [1,1,2,1,1,1]
b = [1,2,3,4,5,6]
print(fun(a,b))
def
fun(data, m):
x =
for item in data:
if item[0] < item[1]:
else:
x = sorted(x, key=lambda k: k[1])
res = 0
for i in range(len(x)):
num = 1
index = i
for j in range(i, len(x)):
if x[j][1] - x[i][0] > m:
break
if x[j][0] >= x[index][1]:
num += 1
index = j
if num > res:
res = num
return res
if __name__ == '__main__':
data = [[0,1],[2,7],[6,9]]
print(fun(data,10))
def
fun(data, m):
x =
for item in data:
if item[0] < item[1]:
else:
x = sorted(x, key=lambda k: k[1])
res = 0
num = 1
first = 0
index = 0
for i in range(1,len(x)):
if x[i][1] - x[first][0] > m:
first += 1
if num > res:
res = num
continue
if x[i][0] >= x[index][1]:
num += 1
index = i
return res
if __name__ == '__main__':
data = [[0,5],[2,7],[3,9]]
print(fun(data,10))
位元組跳動mysql面試 位元組跳動 Golang面試
應朋友之邀,今天下午去位元組送了顆人頭,最後不負眾望,被面試官攆出來了 一面mysql索引快的原理 回答這個問題需要先看一下資料庫的儲存結構 頁結構頁和頁之間的關係 頁和頁之間的關係 有個知識,之前不知道的 聚集索引 以主鍵建立的索引,葉子節點儲存的是表中的資料 非聚集索引 非主鍵建立的索引,葉子節...
位元組跳動秋招2020 8 11筆試記錄
1.可能有多個鬧鐘可以及時到達教室 2.要在所有鬧鐘中找乙個最優解 function gettime arr 輸入部分 varn parseint readline 鬧鐘數目 var rawclocks 原始時間資料 var clocks 所有鬧鐘時間 for let i 0 i n i clock...
位元組跳動 Magic
題目描述 給乙個包含 n個整數元素的集合 個整數元素的集合 a,乙個包含 m個整數元素的集合 b。定義 magic操作為,從乙個集合中取出元素放到另里且過後每的平均值都大於操作前。注意以下兩點 不可以把乙個集合的元素取空,這樣就沒有平均值了 值為 x的元素從集合 b取出放入集合a,但集合 a中已經有...