educoder第1关:岭回归
时间: 2023-09-27 11:10:28 浏览: 65
这是一道编程题目,需要用编程语言来实现。
题目描述:
有一个长度为n的数组a,其中可能存在重复元素。现在要对该数组进行岭回归,即对于每个元素a[i],需要找到其左侧第一个比它大的元素和右侧第一个比它大的元素,并计算它们的乘积。
请你编写一个函数 ridge_regression(a: List[int]) -> List[int],该函数接受一个整数列表a作为参数,返回一个整数列表,其中第i个元素表示a[i]的左侧第一个比它大的元素和右侧第一个比它大的元素的乘积。如果不存在这样的元素,则对应的乘积为-1。
例如,对于数组a=[3, 2, 1, 4, 5, 6, 2, 1],应该返回[6, 6, 4, 30, 24, 20, 6, -1]。
注意:
1. 数组长度n满足1≤n≤105;
2. 数组a中的元素满足1≤a[i]≤109。
示例:
输入:[3, 2, 1, 4, 5, 6, 2, 1]
输出:[6, 6, 4, 30, 24, 20, 6, -1]
解释:左侧第一个比3大的是4,右侧第一个比3大的是4,4×4=16;左侧第一个比2大的是3,右侧第一个比2大的是4,3×4=12;左侧第一个比1大的是2,右侧第一个比1大的是4,2×4=8;左侧第一个比4大的是5,右侧第一个比4大的是5,5×5=25;左侧第一个比5大的是6,右侧第一个比5大的是6,6×6=36;左侧第一个比6大的是5,右侧第一个比6大的是5,5×5=25;左侧第一个比2大的是6,右侧第一个比2大的是-1,6×(-1)=-6;左侧第一个比1大的是2,右侧第一个比1大的是-1,2×(-1)=-2。