牛客每日一题:显生之宙(Java)

显生之宙

题意

这道题目的意思大致是:我们有一个数列,需要进行 n-1 次操作,每次操作我们可以选择其中一个元素 x ,再选择其他至少一个元素,让它们加上 x ,然后删除 x ,问最后剩下的那个元素最小是多少。

思路

这道题的解题中心主要在于:我们如何决定每个元素的删除顺序以及最后剩下的是哪一个元素。

首先,显然我们需要先删除较小的数,因为它能让其他数尽可能地不变大,这符合我们的最终目的。所以接下来我们只需要考虑最后剩下哪一个元素。

我们应当剩下最大的数。为什么?因为显然,负数能够让其他的数都变小,而正数我们则需要尽可能减小它的影响,所以相应地,我们应当尽可能扩大小的数的影响,减小大的数的影响,这也是为何我们需要先处理小的数,后处理大的数,最后剩下最大的数。

基于此,我们先进行一次从大到小的排序,而后遍历求解即可。

正解代码

java 复制代码
import java.util.*;

public class Main{
    static Scanner in = new Scanner(System.in);
    public static void solve(){
        int n = in.nextInt();
        long []a = new long[n + 1];
        for(int i = 1;i <= n;i++) a[i] = in.nextInt();
        Arrays.sort(a, 1, n+1);
        long all = 0;
        long nxt = 0;
        for(int i=1;i<=n;i++){
            a[i] += all+nxt;
            nxt = 0;
            if(a[i] < 0){
                all += a[i];
            }
            else{
                nxt += a[i];
            }
        }
        System.out.println(a[n]);
    }
    public static void main(String[] args){
        int T = in.nextInt();
        for(;T > 0;T--){
            solve();
        }
    }
}

以上就是这篇文章的全部内容。

相关推荐
泡海椒13 分钟前
告别 iText 繁杂配置:jquick-pdf 极简 PDF 生成实战(零基础上手)
java·开发语言·pdf
Bs_MoneyMagnet3 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
不会就选b7 小时前
算法日常・每日刷题--<贪心>14
算法
野生技术架构师9 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
香吧香9 小时前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
qq_25183645710 小时前
AI 疾病自查功能SpringbootAI项目实战 · 技术实现文档
java·ai·ai编程
mmmmath_310 小时前
LeetCode.541.反转字符串II
数据结构·算法·leetcode
Navigator_Z10 小时前
LeetCode //MySQL - 1251. Average Selling Price
c语言·算法·leetcode
逆境不可逃10 小时前
Pi Agent 学习笔记:对话太长以后,如何压缩上下文
java