渤海银行信息科技岗 10.16 编程2【python解法】
10.25面试 许愿二面
一面一共4位面试官,提前面了,差不多25min左右,主要问的是项目相关,技术难点(我的项目主要是写sql,就说了数据倾斜调优)、分析过程、产生的结论这些。
我的本专业引起了一位面试官的注意,问我看过相关的书籍以及学科的应用场景这些。
12.10 收到体检啦~
---------
渤海银行信息科技岗 10.16 编程第二题【python解法】
题目:求一段序列的最长等比子序列的长度。
例:输入
1 3 2 7 4 9 8 10 16输出
5
算法小白的做法:暴力遍历。。
def is_dengbi(l):
#判断是否为等比序列
flag = 0
if len(l)==2:
if l[1]%l[0]!=0:
flag = 1
if len(l) > 2:
if l[1]%l[0]!= 0:
flag = 1
else:
d = l[1]//l[0]
for i in range(1,len(l)-1):
if l[i+1]//l[i] == d:
continue
else:
flag = 1
break
if flag == 0:
return True
else:
return False
from itertools import combinations
list0 = [1,3,2,7,4,9,8,10,16]#测试用例
len0 = len(list0)#最长子序列长度
lens = len0
flag = 0
while lens > 2:
for del_list in list(combinations(list0,lens)):
#遍历所有子序列组合
print(del_list)
if is_dengbi(del_list):
flag = 1
break
if flag == 1:
break
else:
lens = lens-1
print(lens) 补充:评论区动态规划的解法 @henrye
list0 = [1,3,2,7,4,9,8,10,16]
n = len(list0)
dp = [{}]#索引:i 元素:i对应的以key为比值的等比序列元素个数value的哈希表
maxlen = 0
for i in range(1,n):
c = {}#key:i/j的商,value:i/j商的个数
for j in range(0,i):
diff = list0[i]/list0[j]
if diff not in dp[j]:
c[diff] = 2
else:
c[diff] = dp[j][diff]+1
maxlen = max(maxlen,c[diff])
dp.append(c)
print(maxlen) 

查看16道真题和解析