来自牛客题库,oppo真的很友好,还给了解析,然后我这个就是在解析的基础上发散了一些,用以记录,编程题最后一道小欧吃苹果没做。
select r.room_id, r.room_name, count(distinct u.user_id) as user_count -- 其中distinct避免同一个用户被计算两次(我一开始就忘了这个导致第三行结果是2)
from room_info_tb r
left join user_view_tb u on r.room_id = u.room_id
where '23:00:00' <= u.in_time or ('23:00:00' <= u.out_time and u.out_time <= '23:59:59') -- 这里别忘了时间要 ''
group by r.room_id, r.room_name -- 两个一起,要不然会错
order by user_count desc, r.room_id; -- 别忘了room_id升序排列,给我整的一开始1002在第一行
True True
记录一下浅拷贝:Python 深拷贝和浅拷贝详解,这张来自菜鸟教程的图很生动:
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。还可以通过
[:]
切片(不能用于字典和集合完成浅拷贝)完成。 - 深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
对于元组,元组是不可变的,使用 tuple() 或者切片操作符 ‘:’ 不会创建一份浅拷贝,相反它会返回一个指向相同元组的引用(字符串str()也是一样):
tuple1 = (1, 2, 3)
tuple2 = tuple(tuple1) # 或者tuple2 = tuple1[:],结果也一样
print(tuple1 == tuple2) # 仅判断元素是否相同,不在乎是否同一个对象
print(tuple1 is tuple2) # 比较内存地址
>>> (1, 2, 3)
True
True
这是因为判断的是元组,所以用 is 判断是时候才True,如果是列表、集合、字典等,浅拷贝重新分配了内存,所以 is 的结果会是False
输出None
如果字典里面嵌套有字典,无法通过 get() 直接获取值,程序会判断这个字典中没有键为’first’的元素,返回默认值None。如果想获取’first’后面的值,应该访问内部字典:
result = dict.get('num', {}).get('first')
print(result)
人话:当从总体中抽取样本而不是使用整个总体时,就会发生错误
2^4=16个,因为每一个布尔变量都有真假两种取值。
分类算法的学习策略是预测为训练样本最多的类(也就是不管其他,只要训练样本里面某个类别最多,那测试样本里面就预测为此类别)。
- 2折交叉验证:将数据集分成两个相等大小的子集:
A={T,T,T,F,F}, B={F,F,F,T,T}
,进行两次的分类器训练。在第一次中,一个子集作为训练集,另一个便作为测试集;在第二次训练中,则将训练集与测试集对换。
A训练,则B全预测为T,错误率3/5。反之,2/5。综合来看,接近50%。 - 留一法:每次留下一个样本作为测试集,其余9个样本作为训练集。那么不管测试集是T还是F,预测结果都会错误。
子串是字符串中任意个连续的字符组成的序列。这包括空串(长度为0的子串)和字符串本身作为子串。所以是(1+7)*7/2=28
再加上一个空串,结果为29。
WPL = 34*2+16*3+9*4+4*5+7*5+28*2+31*2=325
复习一下哈夫曼树:带权路径长度最短的二叉树,也称为最优二叉树:
构造哈夫曼树的基准就是:权值越小,离根越远
这道题答案应该是:4, 5, 6, 1, 2, 3
,就差一步就能排好序。了
关于排序看这里:排序算法(冒泡、插入、选择、快排、归并)原理动画及Python、Java实现
接下来一些Hadoop相关的题目就不放了,直接来代码题:
def rull(num):
num[0][0], num[0][1], num[1][0], num[1][1] = (
num[1][0],
num[0][0],
num[1][1],
num[0][1],
)
# def beauty(num):
# if num[0][0] < num[0][1] and num[1][0] < num[1][1] and num[0][0] < num[1][0] and num[0][1] < num[1][1]:
# print("Yes")
# return
# else:
# rull(num)
t = int(input())
for _ in range(t):
a, b, c, d = map(int, input().split())
num = [[a, b], [c, d]]
for i in range(4): # 旋转三次
if (
num[0][0] < num[0][1]
and num[1][0] < num[1][1]
and num[0][0] < num[1][0]
and num[0][1] < num[1][1]
):
print("Yes")
break
else:
rull(num)
if i == 3:
print("No")