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









#渤海银行##笔试题目#
全部评论
动态规划
3 回复 分享
发布于 2021-10-25 10:49
暴力27%
1 回复 分享
发布于 2021-10-17 09:29
请问提交的时候在排队 直接保存了 最后系统会运行完吗?
点赞 回复 分享
发布于 2021-10-17 02:04
通过了多少
点赞 回复 分享
发布于 2021-10-17 00:16

相关推荐

评论
点赞
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务