携程第三题记录一下

作者:AFU(OvO)

链接:https://www.nowcoder.com/discuss/1066983

来源:牛客网

题目大意:给一个数组,考虑将其中的最多k个数剔除数组,并加入这k个数的平均值,问数组中最大值和最小值的差最小能为多少?

思路:先将数组排序,然后/分别考虑从左边剔除i(0<=i<=k)个元素,右边剔除k-i个元素的情况下,保存数组最大值和最小值差距的最小值。(平均值通过前缀和数组求)

想到了数组排序,但是没想到可以用一个i值,来让左边剔除i个数,右边剔除k-i个数。来遍历取需要的值。
此外,一旦设计到固定数组求和,多试一试前缀和的解法

public class Q3 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

int k = sc.nextInt();

if (n <= k) {

System.out.println(0);

return;

}

double arr[] = new double[n];

for (int i = 0; i < n; i++) {

arr[i] = sc.nextDouble();

}

Arrays.sort(arr);

double leftSum[] = new double[k + 1];

double rightSum[] = new double[k + 1];

for (int i = 1; i <= k; i++) {

leftSum[i] = leftSum[i - 1] + arr[i - 1];

}

for (int i = n - 1; i >= n - k; i--) {

rightSum[n - i] = rightSum[n - i - 1] + arr[i];

}

double ans = arr[n - 1] - arr[0];

for (int i = 0; i <= k; i++) {

int j = k - i;

double avg = (leftSum[i] + rightSum[j]) / (i + j);

double max = Math.max(arr[n - 1 - j], avg);

double min = Math.min(arr[i], avg);

ans = Math.min(ans, max - min);

}

System.out.println(ans);

}

}

全部评论
见证成长
点赞 回复 分享
发布于 2022-09-29 16:57 河南

相关推荐

KKorz:是这样的,还会定期默写抽查
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4018次浏览 46人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16907次浏览 137人参与
# 巨人网络春招 #
11527次浏览 224人参与
# 春招至今,你的战绩如何? #
15816次浏览 145人参与
# 你的实习产出是真实的还是包装的? #
3098次浏览 53人参与
# 沪漂/北漂你觉得哪个更苦? #
1553次浏览 41人参与
# MiniMax求职进展汇总 #
25165次浏览 322人参与
# HR最不可信的一句话是__ #
1091次浏览 32人参与
# AI面会问哪些问题? #
946次浏览 23人参与
# 你做过最难的笔试是哪家公司 #
1247次浏览 22人参与
# AI时代,哪个岗位还有“活路” #
2853次浏览 51人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152905次浏览 889人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8021次浏览 43人参与
# XX请雇我工作 #
51155次浏览 171人参与
# 简历第一个项目做什么 #
32148次浏览 361人参与
# 简历中的项目经历要怎么写? #
311051次浏览 4265人参与
# 投格力的你,拿到offer了吗? #
178339次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
76981次浏览 375人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187605次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64760次浏览 890人参与
# 如果重来一次你还会读研吗 #
230018次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364353次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务