跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

1877. 数组中最大数对和的最小值

本题要求将偶数长度数组两两配对,使得所有数对和中的最大值尽可能小。核心解法采用贪心策略:先对数组升序排序,然后首尾元素配对(第 i 小与第 n-1-i 大)。通过双指针遍历前半部分计算每对之和并更新最大值。时间复杂度为 O(N log N),主要由排序决定;空间复杂度为 O(log N),源于递归栈开销。代码使用 Java 实现。

并发大师发布于 2026/3/27更新于 2026/5/2925 浏览

1. 整体思路

核心问题

我们需要将一个长度为偶数的数组 nums 中的元素两两配对,使得所有数对和中的最大值尽可能小。

算法逻辑:贪心策略

  1. 直觉:
    • 为了让数对和的最大值尽可能小,我们需要避免'大数 + 大数'的情况(这会产生极大的和)。
    • 最好的策略是让最大的数去中和最小的数。
    • 也就是:第 1 小 + 第 1 大,第 2 小 + 第 2 大,…,第 k 小 + 第 k 大。
    • 这种'首尾配对'的策略可以平均化每对的和,从而压低最大值的上界。
  2. 具体步骤:
    • 排序:首先对数组进行升序排序。
    • 双指针/首尾遍历:使用一个循环,同时取数组最左边(较小)和最右边(较大)的元素进行求和。
    • 更新最大值:在遍历过程中,记录下所有配对和中的最大值。

2. 完整代码

import java.util.Arrays;

class Solution {
    public int minPairSum(int[] nums) {
        // 1. 排序
        // 将数组按从小到大排序,以便使用贪心策略
        // 排序是本算法最耗时的步骤
        Arrays.sort(nums);
        int n = nums.length;
        int max = 0; // 记录遍历过程中的最大数对和
        
        // 2. 首尾配对遍历
        // 只需要遍历前半部分 (0 到 n/2 - 1)
        // 第 i 个元素 (较小值) 与 第 n-1-i 个元素 (较大值) 配对
        for (int i = 0; i < n / 2; i++) {
            int left = nums[i]; // 当前这一对中的最小值
            int right = nums[n - i - 1]; // 当前这一对中的最大值
            
            // 计算当前对的和,并尝试更新全局最大值
            // 我们希望最小化这个 max
            max = Math.max(left + right, max);
        }
        
        // 返回记录到的最大数对和
        return max;
    }
}

3. 时空复杂度

假设数组 nums 的长度为 N。

时间复杂度:O(N \log N)

  • 排序:Arrays.sort 使用双轴快速排序,平均时间复杂度为 O(N \log N)。这是算法的主导部分。
  • 遍历:单次循环遍历数组的一半,复杂度为 O(N)。
  • 总计:O(N \log N) + O(N) = O(N \log N)。

空间复杂度:O(log N)

  • 计算依据:
    • 代码本身只使用了常数个额外变量 (n, max, left, right)。
    • 但是,Java 的 Arrays.sort 对于基本数据类型 int 使用的是 Dual-Pivot Quicksort。虽然它是原地排序(in-place),但递归调用栈需要消耗 O(log N) 的空间。
  • 结论:O(log N)。

目录

  1. 1. 整体思路
  2. 核心问题
  3. 算法逻辑:贪心策略
  4. 2. 完整代码
  5. 3. 时空复杂度
  6. 时间复杂度:O(N \log N)
  7. 空间复杂度:O(log N)
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Gemma-3-12B-IT WebUI 安全加固:HTTPS、IP 白名单与限流
  • Claude Code 与 cc-switch 配置指南
  • C++ 使用 CopyFileExA 实现带进度显示的文件拷贝
  • PyTorch 卷积神经网络 (CNN) 详解
  • LLaMA-Factory WebUI 快速上手与模型加载问题解决方案
  • Stable Diffusion XL 快速部署与使用指南
  • Pyodide:在浏览器中运行 Python
  • LeetCode 744. 寻找比目标字母大的最小字母 - 遍历解法
  • AIGC 技术解析:市场现状、应用场景与未来趋势
  • 二分查找算法实战:求平方根与山脉数组峰值
  • Python 经典面试题与核心知识点详解
  • Gemma-3-12B-IT WebUI 部署与使用指南
  • 宇树机器人 SDK2 开发指南:环境搭建与 Demo 测试
  • 使用 OpenClaw 与飞书构建自动化服务器运维机器人
  • Chatbox AI 深度测评与核心功能使用教程
  • 操作系统智能助手 OS Copilot 新功能测评
  • 基于硅基流动 API 配置 SillyTavern 与 DeepSeek 模型方案
  • 深度确定性策略梯度算法 (DDPG) 详解与 PyTorch 实现
  • Python 入门教程:环境搭建、基础语法与数据类型详解
  • Foxglove 机器人开发环境搭建指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online