题目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