KEEP笔试

题目1:给的数据的x和y,返回最小二乘法的k和b

方法:将x和y的值保存为两个数组,然后按照最小二乘法来求解。最后得到的b与测试用例保留的个数少了一位,无法通过测试。。。

x = [1,2,3]
y = [3,5,6]
def fun(x, y):
    size = len(x)
    i = 0
    sum_xy = 0
    sum_y = 0
    sum_x = 0
    sum_suqre_x = 0
    average_x = 0
    average_y = 0
    while i < size:
        sum_xy += x[i] * y[i]
        sum_y += y[i]
        sum_x += x[i]
        sum_suqre_x += x[i] *x[i]
        i += 1
    average_x = sum_x / size
    average_y = sum_y / size
    k = (size * sum_xy - sum_x * sum_y) / (size* sum_suqre_x-sum_x*sum_x)
    b = average_y - average_x*k
    print(len(str(b)))
    return k , b
print(fun(x,y))
    

题目2:给的N和R,数组 [1,2,3...,N] 的全排列中,统计冒泡排序只需要R次的数组个数,返回数组个数

方法:构造全排列,如果满足R次则返回1,如果超出则break。但是最后只能AC10%,显示部分超出了内存


n = 3
r = 1


def permute(nums):
    res = []
    def back(nums, tmp):
        if not nums:
            print(tmp)
            if count(tmp) == r:
                print(tmp)
            return 
        for i in range(len(nums)):
            back(nums[:i] + nums[i+1:], tmp + [nums[i]])
    back(nums, [])
    return res

dp = permute([i for i in range(1,n+1)])
print(dp)
def count(a):
    count = -1
    for i in range(len(a)):
        count += 1
        flag = True
        for j in range(len(a)-i-1):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1], a[j]
                flag = False
        if flag or count > r:
            break
    return count
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值