思路:首先计算出每个i对应的表达式的值,然后按照距离中位数的距离从小到大排序,再按照i从大到小排序,找到第一个满足条件的i即可。

具体实现:

1.计算每个i对应的表达式的值:

vector expr(scores.size() - K + 1); for (int i = 0; i < scores.size() - K + 1; i++) { expr[i] = scores[i] - scores[i+1] - scores[i+K-1]; }

2.计算数组中位数:

sort(scores.begin(), scores.end()); int median = scores[scores.size() / 2];

3.将表达式的值按照距离中位数的距离从小到大排序:

vector dist(expr.size()); for (int i = 0; i < expr.size(); i++) { dist[i] = abs(expr[i] - median); } vector indices(expr.size()); iota(indices.begin(), indices.end(), 0); sort(indices.begin(), indices.end(), [&dist](int i, int j) { return dist[i] < dist[j]; });

4.按照i从大到小排序:

sort(indices.begin(), indices.end(), [](int i, int j) { return i > j; });

5.找到第一个满足条件的i:

for (int i : indices) { if (expr[i] == *min_element(expr.begin(), expr.end())) { return i; } } return -1; // 没有满足条件的

给定一个数组X和正整数K请找出使表达式 xi-Xi+1-Xi+K-1结果最接近于数组中位数的下标i如果有多个满足条件i请返口最大的i。其中数组中位数:长度为N的数组按照元素的值大小升序排列后下标为N2元素的值 int findTheStartPositionvectorint& scores int K

原文地址: https://www.cveoy.top/t/topic/fH7p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录