当前位置: 首页 > news >正文

2026-03-31:三元素表达式的最大值。用go语言,从数组 nums 中任选三个下标互不相同的元素,设这三个元素分别为 a、b、c(对应的下标不能重复)。 计算表达式 a + b - c,希望让它

2026-03-31:三元素表达式的最大值。用go语言,从数组 nums 中任选三个下标互不相同的元素,设这三个元素分别为 a、b、c(对应的下标不能重复)。

计算表达式 a + b - c,希望让它的结果尽可能大。

最终返回所有可能选择中,该表达式取得的最大值。

3 <= nums.length <= 100。

-100 <= nums[i] <= 100。

输入: nums = [1,4,2,5]。

输出: 8。

解释:

可以选择 a = 4,b = 5,c = 1。表达式的值为 4 + 5 - 1 = 8,这是可能的最大值。

题目来自力扣3745。

一、核心解题思路

要让表达式a + b - c的结果最大,数学逻辑是:

  • a + b的值尽可能大(选数组中最大的两个数)
  • c的值尽可能小(选数组中最小的一个数)
    同时满足:a、b、c 是数组中下标互不相同的三个元素。

二、代码执行详细步骤(以输入 nums = [1,4,2,5] 为例)

步骤1:初始化三个关键变量

  • mx:存储数组中的最大值,初始值设为整数最小值(保证任何数组元素都比它大)
  • mx2:存储数组中的第二大值,初始值同样设为整数最小值
  • mn:存储数组中的最小值,初始值设为整数最大值(保证任何数组元素都比它小)

步骤2:遍历数组中的每一个元素,逐个更新变量

数组元素依次为:1 → 4 → 2 → 5,逐个处理:

  1. 处理第一个元素 1

    • 1 大于当前最大值mx(初始最小值),所以:
      第二大值mx2更新为原来的最大值(初始最小值)
      最大值mx更新为 1
    • 1 小于当前最小值mn(初始最大值),最小值mn更新为 1
    • 此时变量:mx=1,mx2=最小数,mn=1
  2. 处理第二个元素 4

    • 4 大于当前最大值mx(1),所以:
      第二大值mx2更新为原来的最大值 1
      最大值mx更新为 4
    • 4 大于当前最小值mn(1),最小值保持 1 不变
    • 此时变量:mx=4,mx2=1,mn=1
  3. 处理第三个元素 2

    • 2 不大于当前最大值mx(4),但大于第二大值mx2(1),所以:
      第二大值mx2更新为 2
      最大值mx保持 4 不变
    • 2 大于当前最小值mn(1),最小值保持 1 不变
    • 此时变量:mx=4,mx2=2,mn=1
  4. 处理第四个元素 5

    • 5 大于当前最大值mx(4),所以:
      第二大值mx2更新为原来的最大值 4
      最大值mx更新为 5
    • 5 大于当前最小值mn(1),最小值保持 1 不变
    • 此时变量:mx=5,mx2=4,mn=1

步骤3:计算最终结果

最大值 + 第二大值 - 最小值计算:
5 + 4 - 1 = 8,和题目要求的输出结果一致。

步骤4:返回结果并输出

将计算得到的 8 作为最终结果返回,主函数打印输出。

三、时间复杂度分析

  • 代码中只执行了一次数组遍历,遍历的次数等于数组的长度n
  • 遍历过程中的每一步操作(比较、赋值、计算)都是常数时间 O(1)
  • 总时间复杂度:O(n)(n 为数组长度)。

四、额外空间复杂度分析

  • 代码中没有创建与数组长度相关的新数据结构(如新数组、切片等)。
  • 只使用了 3 个固定的变量(mx、mx2、mn),占用的空间是常数,不随数组长度变化。
  • 总额外空间复杂度:O(1)

总结

  1. 求解核心:选最大两数相加,减去最小数,保证三个数下标不同;
  2. 执行过程:初始化变量→遍历数组更新最大、第二大、最小值→计算表达式→输出结果;
  3. 时间复杂度 O(n),仅需一次遍历;
  4. 额外空间复杂度 O(1),仅使用固定数量的变量。

Go完整代码如下:

packagemainimport("fmt""math")funcmaximizeExpressionOfThree(nums[]int)int{mx,mx2,mn:=math.MinInt,math.MinInt,math.MaxIntfor_,x:=rangenums{ifx>mx{mx2=mx mx=x}elseifx>mx2{mx2=x}mn=min(mn,x)}returnmx+mx2-mn}funcmain(){nums:=[]int{1,4,2,5}result:=maximizeExpressionOfThree(nums)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-importmathfromtypingimportListdefmaximize_expression_of_three(nums:List[int])->int:mx=-math.inf mx2=-math.inf mn=math.infforxinnums:ifx>mx:mx2=mx mx=xelifx>mx2:mx2=x mn=min(mn,x)returnmx+mx2-mndefmain():nums=[1,4,2,5]result=maximize_expression_of_three(nums)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<vector>#include<climits>#include<algorithm>intmaximizeExpressionOfThree(conststd::vector<int>&nums){intmx=INT_MIN;intmx2=INT_MIN;intmn=INT_MAX;for(intx:nums){if(x>mx){mx2=mx;mx=x;}elseif(x>mx2){mx2=x;}mn=std::min(mn,x);}returnmx+mx2-mn;}intmain(){std::vector<int>nums={1,4,2,5};intresult=maximizeExpressionOfThree(nums);std::cout<<result<<std::endl;return0;}

http://www.jsqmd.com/news/564850/

相关文章:

  • Topit:通过窗口层级控制技术实现Mac高效窗口管理
  • Ubuntu20.04下Boost安装避坑指南:解决Python路径报错问题
  • 桥梁损伤分割数据集YHT3261-5类 YOLOv8分割模型。桥梁损伤分割数据集 钢筋外露、混凝土剥落、裂缝、钢筋锈蚀、结构变形
  • 如何利用anyRTC-RTMP-OpenSource实现高效图片推流:特殊场景下的完美替代方案
  • Spring Boot项目里,Apollo配置变了怎么自动刷新业务缓存?手把手教你写ConfigListener
  • BEVFormer v2实战指南:如何用透视监督提升3D目标检测性能(附NuScenes数据集测试)
  • ESP32 I2S接口实战:驱动OV7670摄像头(无FIFO)并实现网页实时监控
  • Keepalived常见配置陷阱:为什么你的两台服务器都获得了VIP?
  • Windows下C++11多线程环境搭建:最新MinGW-w64安装配置全流程(附环境变量设置避坑点)
  • ollama v0.19.0 发布!Web 搜索插件上线、多模型兼容修复、MLX 与 KV 缓存全面优化,本地大模型体验再升级
  • 终极指南:NGINX Ingress Controller自定义配置全解析——从Annotations到ConfigMaps
  • 如何彻底摆脱网盘下载限制:免费获取八大平台直链下载地址的完整指南
  • Phi-4-mini-reasoning在科研场景应用:论文公式推导与算法验证辅助实践
  • 【专栏一:AI基础08】-【一张图讲清楚:RAG的原理(从“查资料”到“生成答案”全过程)】
  • GME-Qwen2-VL-2B-Instruct快速上手:Anaconda科学计算环境配置
  • 高级java每日一道面试题-2025年9月23日-企业集成篇[LangChain4j]-如何与现有的企业中间件集成(Kafka、RabbitMQ)?
  • Illustrator脚本大全:30+免费工具让你的设计效率翻倍
  • 智能抠图与虚拟背景:obs-backgroundremoval的技术革新与场景落地
  • ISE14.7环境下的ChipScope Pro避坑指南:信号丢失/采样异常的5种解决方法
  • 利用Ollama本地化部署nli-distilroberta-base:轻量级推理方案
  • 别再只用结构体了!C语言共用体(Union)的3个实战应用场景(含代码)
  • 5大技术突破如何破解A站视频资源管理难题?
  • OBS Advanced Timer全能直播计时工具:如何让你的直播节奏掌控自如
  • Fun-ASR-MLT-Nano-2512效果展示:中英文技术文档朗读语音的术语保留识别
  • 无锡高端腕表维修技术解析:2026年苏南地区36大品牌精密时计修复能力与服务标准全览 - 时光修表匠
  • 5大维度提升英雄联盟体验:面向玩家的智能工具集
  • AUTOSAR OS中断配置避坑指南:Vector DaVinci中一类与二类中断的实战选择
  • Unity项目避坑实录:集成Enviro动态天气插件时,我踩过的5个坑(附解决方案)
  • Phi-3-mini-4k-instruct-gguf开发者案例:为微信小程序后端提供的轻量API服务
  • 效率提升:用快马AI生成代码安全扫描工具,预判应用控制拦截点