2026-01-22-LeetCode刷题笔记-3507-移除最小数对使数组有序I


title: 2026-01-22-LeetCode刷题笔记-3507-移除最小数对使数组有序I

date: 2026-01-22

tags:

  • 算法学习
  • LeetCode
  • 贪心

题目信息

  • 平台:LeetCode
  • 题目:3507. 移除最小数对使数组有序 I
  • 难度:简单
  • 题目链接

题目描述

给定数组 nums,每次可以选择相邻的一对元素,将它们合并为它们的和(等价于删除这对并用和替代)。每次操作选择"当前相邻对和最小"的那一对。问最少需要多少次操作,才能让数组变为非递减序列。


初步思路

  1. 只要数组已非递减,就停止。
  2. 否则在当前数组里遍历所有相邻对,找到和最小的一对进行合并。
  3. 重复上述过程,统计操作次数。

算法分析

  • 核心:每轮扫描所有相邻对,若仍无序则合并最小对
  • 技巧:一次遍历同时判断是否已非递减,并找到最小相邻对
  • 时间复杂度:O(k·n),k 为合并次数(每次遍历当前数组)
  • 空间复杂度:O(1)(原地修改列表)

代码实现(Python)

python 复制代码
'''
Author: tkzzzzzz6
Date: 2026-01-22 22:28:44
LastEditors: tkzzzzzz6
LastEditTime: 2026-01-22 22:47:28
'''

class Solution:
    def minimumPairRemoval(self, nums: List[int]) -> int:
        cnt = 0

        while len(nums)>1:
            isAscending = True
            minSum = inf
            target_idx = -1

            for i in range(len(nums)-1):
                pair_sum = nums[i]+nums[i+1]
                if nums[i]>nums[i+1]:
                    isAscending = False

                if minSum > pair_sum:
                    minSum = pair_sum
                    target_idx = i
                
            if isAscending:
                break

            cnt += 1
            nums[target_idx] = minSum
            nums.pop(target_idx+1)
        return cnt

总结与反思

  1. 每轮遍历既能判断是否有序,也能确定最小相邻对。
  2. 该实现为直接模拟,便于理解,但在数据规模大时会偏慢。
相关推荐
Q741_1475 分钟前
每日一题 力扣 3655. 区间乘法查询后的异或 II 模拟 分治 乘法差分法 快速幂 C++ 题解
c++·算法·leetcode·模拟·快速幂·分治·差分法
西梅汁17 分钟前
C++ 观察者模式
笔记
لا معنى له1 小时前
Var-JEPA:联合嵌入预测架构的变分形式 —— 连接预测式与生成式自监督学习 ----论文翻译
人工智能·笔记·学习·语言模型
chase。1 小时前
【学习笔记】让机器人“边想边动”——实时动作分块流策略的执行方法
笔记·学习·机器人
abant21 小时前
leetcode 239 单调队列 需要一些记忆
算法·leetcode·职场和发展
[ ]8981 小时前
Stack_MLAG_知识点梳理
网络·笔记·网络协议
唐樽2 小时前
C++ 竞赛学习路线笔记
c++·笔记·学习
bobasyu2 小时前
Claude Code 源码笔记 -- queryLoop
java·笔记·spring
水云桐程序员3 小时前
Quartus II集成开发环境 |FPGA
笔记·fpga开发·硬件工程·创业创新
禹中一只鱼3 小时前
【Charles 抓包工具笔记】(自用复盘版)
笔记·charles·抓包工具·配置代理