8.12 python 字节跳动笔试后笔记
1.球场分块用DFS搜索
import sys try: while True: m,n=list(map(int, raw_input().split(','))) mat=[] for i in range(m): mat.append(map(int, raw_input().split(','))) def search(i,j): if i<0 or j<0 or i>=m or j>=n or mat[i][j]!=1: return 0 temp=mat[i][j] mat[i][j]=-1 manCount=temp+search(i-1,j)+search(i+1,j)+search(i,j-1)\ +search(i,j+1)+search(i-1,j-1)+search(i+1,j+1)\ +search(i-1,j+1)+search(i+1,j-1) return manCount blockNum=0 maxNum=0 for i in range(m): for j in range(n): manNum=search(i,j) if manNum>0: blockNum+=1 if manNum>maxNum: maxNum=manNum print str(blockNum)+','+str(maxNum) except Exception: pass
2.重叠范围数组合并
try: while True: m=int(raw_input()) mat=[] for i in range(m): s=raw_input().split(';') for item in s: t=item.split(',') mat.append(map(int, t)) mat.sort() ind=1 res=[mat[0]] while ind<len(mat) if mat[ind][0]<=res[-1][1]: if mat[ind][1]>=res[-1][1]: x=res[-1][0] y=mat[ind][1] res.pop(-1) res.append([x, y]) else: res.append(mat[ind]) ind+=1 for ind in range(len(res)): bl=(ind!=len(res)-1) sys.stdout.write(str(res[ind][0])+','+str(res[ind][1])+';'*bl) except Exception: pass
3. 题听说是背包问题,取牌问题。二维数组,一维是个人加分项,一维是集体积分项。
甲乙两人从中选取当个人加分项相等时,集体加分最大值。
4. 题穷举a数组窗口内部最大值<b数组窗口最小值,时间复杂度过高30%
5. 类似数组范围重叠,但题目的时间分段没看明白(前面有0,后面又是0?)
#笔记##字节跳动##笔试题目##Python#