渤海银行信息科技岗 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)