1049. 最后一块石头的重量 II

LeetCode 1049 - 最后一块石头的最小可能重量(Last Stone Weight II)

题目描述

给定一堆石头,每块石头有一个整数重量,用数组 stones 表示。其中 stones[i] 是第 i 坊石头的重量。

每一回合,从中选出任意两块石头,将它们一起粉碎。假设这两块石头的重量分别为 x 和 y,且 x <= y,那么粉碎的规则如下:

  • 如果 x == y,两块石头都会被完全粉碎,消失;
  • 如果 x != y,重量为 x 的石头会被完全粉碎,而重量为 y 的石头的新重量为 y - x。

反复进行此过程,最多只会剩下一块石头。请返回这块石头的最小可能重量。如果所有石头都被粉碎了,返回 0。


题目分析

这道题看似复杂,实则是一道典型的 “划分两堆使得两堆重量差最小” 的变种问题。

关键观察

  • 每次选择两块石头粉碎的操作,等价于用两块石头的重量差替代这两块石头。
  • 最终剩下的石头重量,即两堆石头的重量差。

换句话说,这个问题转化为如何将 stones 分成两个子集,使得两个子集的重量差最小。


解题思路

我们用动态规划模拟「01背包」问题,目标是找到一个子集,使该子集重量和尽可能接近总重量的一半。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值