选择题
- 文件权限 rw-rw-rw 对应数字
- cpu用户态变核心态
- STL容器
- Java 异步任务的接口是什么
- Objects 类(超类、父类)
- 系统调用有操作系统的什么提供的(内核?动态库?)
- 关系模式、第三范式
- 10个叶子结点的二叉树,度为2的结点个数?
- JOIN ,sql 算子,优化(Left Outer 、Inner Outer、Full Outer)
- 守护进程 daemon
- Java 反射
- Select From Where limit 语句执行顺序
- tcp协议 (扩展sack)
- IPv6
- DHCP 客户端、服务端、中继代理 号码
- 继承基类的public 成员
- int main(){ fork() || fork() printf(‘x’) sleep(1) exit(0)} 输出
算法题
- 两个点之间构成的长方形,长为x的差,宽为y的min。给定点的y,x为序号。如
[4,1,2,7]
就是(0,4),(1,1),(2,2),(3,7)
,求两个点组成的长方形面积最大是多少?
输入:
'[4,1,2,7]'
输出:
12
分析
area = width * height = abs(x1-x2) * min(y1,y2)
直接双循环暴力解法,ac了,也懒得想了
代码
import sys
for line in sys.stdin:
# 输入[1:-1]这里去掉了首尾的【】,-2是调试出来的,没仔细看,估计多了个空格
inputs = line[1:-2].split(',')
inputs_ = list(map(int,inputs))
points = [(i,item) for i,item in enumerate(inputs_)]
def computeArea(p1,p2):
width = abs(p1[0]-p2[0])
height = min(p1[1],p2[1])
return width * height
maxArea = 0
for i in range(len(points)):
for j in range(len(points)- i -1):
p1,p2 = points[i],points[i+j+1]
area = computeArea(p1,p2)
if area > maxArea:
maxArea = area
print(maxArea)
- 城市之间构成有向无环图,求从0到4有多少种方式?
输入:
[[1,2,3],[3],[3],[4],[]]
输出:
3
分析
图的遍历想到了bfs/dfs
求多少种方式想到了动态规划,尝试倒序开始
- 找能到 4 的,是 [3]
- 找能到 3 的,是 [0,1,2]
- 找
- 0
- 能到 1 的,是 [0]
- 能到 2 的,是 [0]
可以看到,找到 0,有三种方式
往前找的话,滑窗减小
(写到这突然发现也可以正序。。。,ac了,就这样吧,毁灭吧)
代码
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算dag 路径上起始到目的节点的路径数目
# @param nodes int整型二维数组 第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a ),若为空,就是没有下一个节点了。
# @return int整型
#
class Solution:
def DagPathNum(self , nodes: List[List[int]]) -> int:
res = []
def dfs(num,nodes,res):
for i,item in enumerate(nodes):
if num in item:
if i == 0:
res.append(num)
dfs(i,nodes[:-(len(nodes)-i)],res)
dfs(len(nodes)-1,nodes,res)
ans = len(res)
return ans