【灵神题单·贪心】3745. 三元素表达式的最大值 | 排序贪心 | Java

🔗 题目链接:3745. 三元素表达式的最大值

📚 所属题单:灵茶山艾府 · 贪心算法题单 --- §1.1 从最小/最大开始贪心

🏷️ 难度:Easy | 难度分:1218

🔖 标签:贪心、数组、排序

📖 题目描述

给你一个整数数组 nums

nums 中选择三个元素 abc,它们的下标需互不相同 ,使表达式 a + b - c 的值最大化。

返回该表达式可能的 最大值

示例 1

复制代码
输入:nums = [1,4,2,5]
输出:8
解释:选择 a = 4,b = 5,c = 1。表达式的值为 4 + 5 - 1 = 8,这是可能的最大值。

示例 2

复制代码
输入:nums = [-2,0,5,-2,4]
输出:11
解释:选择 a = 5,b = 4,c = -2。表达式的值为 5 + 4 - (-2) = 11,这是可能的最大值。

提示

  • 3 <= nums.length <= 100
  • -100 <= nums[i] <= 100

💡 思路分析

a + b - c 要最大化,拆开来看:

  • a + b 要尽量大 → 选最大的两个数
  • c 要尽量小 → 选最小的那个数

由于 a、b、c 下标互不相同(但数组至少 3 个元素),排序后最大的两个和最小的那个肯定不会重叠(除非数组恰好 3 个元素,那也没问题)。

这就像买菜------你手里拿着两个最贵的菜,然后找到商场里最便宜的一个打折扣。总价减去折扣,收益最大 💰

算法步骤

  1. 排序:把数组从小到大排
  2. 返回结果nums[n-1] + nums[n-2] - nums[0](最大的两个减最小的)

就这么简单,一行搞定。

✅ 代码实现(Java)

java 复制代码
class Solution {
    public int maximizeExpressionOfThree(int[] nums) {
        // 排序:最小的在前,最大的在后
        Arrays.sort(nums);
        int n = nums.length;
        // a + b 取最大的两个,c 取最小的那个
        return nums[n - 1] + nums[n - 2] - nums[0];
    }
}

📊 复杂度分析

复杂度 说明
⏱️ 时间 O(n log n) 排序
💾 空间 O(log n) 排序的栈空间

🔗 参考

🎯 这题简单到有点不好意思说它是贪心------排序后首尾各取一下就完了。但它完美诠释了 §1.1 的核心思想:从最大/最小开始贪心

相关推荐
冻柠檬飞冰走茶1 小时前
PTA基础编程题目集 7-27 冒泡法排序(C语言实现)
c语言·开发语言·数据结构·算法
听雨入夜1 小时前
“同声传译”还是“全文翻译”?为何HotSpot虚拟机仍要保留解释器?
开发语言·python
随风M记忆s1 小时前
GEE&Python-demo:利用Sentinel-监测北京奥林匹克森林公园年NDVI变化(附Python版)
开发语言·python·sentinel
C++、Java和Python的菜鸟2 小时前
第9章 后端Web进阶(AOP)
java·开发语言·前端
软萌萌的12 小时前
Python零基础从入门到精通详细教程-数据类型
开发语言·windows·python
东北赵四2 小时前
关于Java泛型的知识点及其相关面试题
java·windows·python
姓蔡小朋友2 小时前
Java线程并发
java·开发语言·python
执笔画流年呀2 小时前
⾃动化测试常⽤函数
java·dubbo
我星期八休息2 小时前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
疯狂打码的少年2 小时前
【面向对象】UML概述(基本构造块:事物/关系/图)
java