算法-Last Stone Weight-最后一块石头的重量

MacOS下微信小程序源码提取与逆向实战:从找到.wxapkg到完整还原 本文详细介绍了在MacOS系统下进行微信小程序源码提取与逆向分析的完整实战流程。从定位沙盒机制中的.wxapkg缓存文件,到搭建Node.js环境与配置wxappUnpacker工具链,再到执行核心反编译命令并处理分包等复杂情况,提供了清晰的操作步骤。文章还汇总了Node版本、依赖缺失、文件乱码等常见问题的解决方案,旨在帮助开发者、安全研究人员高效完成小程序安全审计与学习。 阅读详情

1、题目描述

有一堆石头,每块石头的重量都是正整数。
每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:
如果 x == y,那么两块石头都会被完全粉碎;
如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。
最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。

示例:
输入:[2,7,4,1,8,1]
输出:1
解释:
先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1],
再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1],
接着是 2 和 1,得到 1,所以数组转换为 [1,1,1],
最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。

2、题目分析

  • 首先挑出最大重量的两个石头,按照对比规则进行处理
  • 已知石头的质量是正整数
  • 问题就是选用合适的数据结构,来选出最大的两个数,同时将可能的新值加入进去,循环进行
  • 1、模拟过程,使用数组排序,每次选取头上的两个
  • 2、使用最大堆,将堆顶作对比

3、代码实现

    //模拟+排序
    public int lastStoneWeight1(int[] stones) {
        int n = stones.length - 1;
        if(n <= 0) return stones[0];
        Arrays.sort(stones);
        while(stones[n - 1] > 0){
            if(stones[n] == stones[n - 1]){
                stones[n] = -1;
                stones[n - 1] = -1;
            }else{
                stones[n] = stones[n] - stones[n - 1];
                stones[n - 1] = -1;
            }
            Arrays.sort(stones);
        }
        return stones[n] == -1 ? 0 : stones[n];
    }
//最大堆  优先队列
    public int lastStoneWeight(int[] stones){
        //默认堆顶保存最小值,重写让堆顶保存最大值
        PriorityQueue<Integer> pq = new PriorityQueue<>((o1,o2) -> (o2 - o1));
        for(int stone : stones) pq.offer(stone);
        while(pq.size() > 1){
            int a = pq.poll();
            int b = pq.poll();
            if(a != b) pq.offer(a - b);
        }
        return pq.isEmpty() ? 0 : pq.poll();
    }

4、复杂度分析

  • 方法2
    • 时间复杂度:O(NlogN)
    • 空间复杂度:O(N)
【IT小趣闻】免费的DeepSeek是如何赚钱的? 导语:目前很多的通用人工智能也就是所谓的AGI例如文心一言、豆包、通义千问和最近大火的DeepSeek都是免费给普通用户使用的,对开源商业模式不太熟悉的普通人可不太了解这免费背后的商业套路,下面我们就一起来揭秘。开源模式能降低用户信任成本、加速技术普及,而商业化服务则针对企业级需求。DeepSeek 可通过组合上述策略,在服务开发者社区的同时,满足企业客户的深度需求,实现可持续发展。你也看出来了,上边是DeepSeek生成的,讲的还是挺明白的。 阅读详情

相关推荐

GD32F103RCT6/GD32F303RCT6(6.2)USART串口实战:从寄存器配置到DMA高效传输

本文详细介绍了GD32F103RCT6和GD32F303RCT6的USART串口通信实战,从寄存器配置到DMA高效传输的全过程。通过具体的代码示例和优化建议,帮助开发者快速掌握串口通信的关键技术,提升嵌入式开发效率。特别强调了DMA在高速数据传输中的优势和应用技巧。

weixin_33725239的博客 308

leetcode 1046. 最后一块石头的重量(优先队列)

【题目】1046. 最后一块石头的重量 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果 x == y,那么两块石头都会被完全粉碎; 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。 最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。 示例: 输入:[2,7,4,1,8,1] 输出:1 解释: 先选出

Sophia_fez的博客 492

STM32F030F4P6 ADC多通道定时器触发DMA搬运

主函数中等待转换完成的标志位,然后打印出来。ADC回调函数中将数值赋值给变量。配置定时器1s读一次。

qq_24426625的博客 1355

【leetcode】最后一块石头的重量

一、题目描述 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x<=y。那么粉碎结果可能如下: 如果x==y,那么两块石头完全粉碎; 如果x!=y,那么重量为x的石头被粉碎,而重量为y的石头新重量为y-x 最后,最多只会剩下一块石头,返回此石头的重量,如果没有石头剩下,就返回0; 提示: 1 <=...

GUANYX的博客 1310

CTP开发实战:如何高效处理预埋单与委托单的完整流程(附代码示例)

本文深入探讨了CTP开发中预埋单与委托单的完整处理流程,从订单生命周期理解、核心代码实现到异步事件处理与系统健壮性构建。通过详细的代码示例和状态机分析,为开发者提供了构建高可靠订单处理系统的实战指南,重点解决了状态同步、异常恢复等关键工程挑战。

weixin_29234239的博客 116

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 378

最后一块石头的重量II

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。target的理解:被消去的石头重量除以二的商。如果 x == y,那么两块石头都会被完全粉碎;有一堆石头,每块石头的重量都是正整数。

Zxy18327720221的博客 347

摇骰子、抽奖转盘酒桌游戏 人生重启模拟器小程序源码分享-开通流量主躺着赚钱

摇骰子、抽奖转盘酒桌游戏 人生重启模拟器小程序源码分享-开通流量主躺着赚钱

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1650

leetcode 1046. Last Stone Weight(最后石头的重量)

优先队列

蓝羽飞鸟的博客 396

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

锐捷-GZ073 网络系统管理赛项赛题第1套A模块-S5配置

weixin_46183247的博客 767

Arcgis建筑面shp由DSM和DEM获取高度拉伸并可视化

Arcgis建筑面shp由DSM和DEM获取高度拉伸并可视化

yilvyangguang520的博客 3990

Leetcode_C++笔记之1046. Last Stone Weight(最后一颗石头的权重)

Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默。优先队列具有队列的所有特性,包括队列的基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的。1、按照题目依次找出两个最大值并将对应位置置零,然后这两个最大值相减,结果插入到数组中值是0的位置,最后如果第二个最大值是0,则返回第一个最大值。

JayShaun的博客 560

配置 SAP Web Dispatcher 的实战指南:打通 SAP Fiori、SAP Gateway 与前端系统的关键一跳

SAP Web Dispatcher 在 Fiori 架构中扮演关键角色,作为统一入口处理 HTTPS 请求、实现安全代理和流量分发。它将分散在不同系统的访问路径统一收口,解决浏览器同源策略限制,集中管理 HTTPS 终止和客户端信息传递。典型配置中,Web Dispatcher 监听 443 端口,根据路径将 OData 请求转发至 Gateway 系统,静态资源请求送至前端服务器。SSL 相关配置(如 PSE 文件)确保安全通信,而路由规则(wdisp/system_xx)决定请求转发目标。实施时需注意

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 101

每日一题 LeetCode1049. 最后一块石头的重量 II java题解

题目 https://leetcode-cn.com/problems/last-stone-weight-ii/ 背包问题可参考:https://leetcode-cn.com/problems/last-stone-weight-ii/solution/yi-pian-wen-zhang-chi-tou-bei-bao-wen-ti-5lfv/ 思路 石头总重量为sum,取负的重量为neg,另外的为sum-neg。最后一块石头的重量为sum-2neg。 要使最后一块石头的重量最小,neg要最大(但不大

乾坤未定,你我皆是黑马 400

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LeetCode-1046. Last Stone Weight(最后一块石头的重量)

最后一块石头的重量 Last Stone Weight 解 降序排序,每次 选取最重的。应该算是贪心吧。 由于C语言没有sort函数,所以这里用的是并归排序 void Merge(int a[], int left, int mid, int right) { int len = right - left + 1;//数组长度 int temp[len]; int k ...

三九_感冒灵的博客 446

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[Swift]LeetCode1049.最后一块石头的重量 II | Last Stone Weight II

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30622107的博客 181

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LeetCode.1046-最后的石头重量(Last Stone Weight)

这是小川的第388次更新,第418篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第250题(顺位题号是1046)。有一个石头集合,每个石头都有一个正整数重量值。 每次,我们选择两块最重的岩石并将它们粉碎在一起。假设石头的重量为x和y,x <= y。粉碎的结果是: 如果x == y,两块石头都被完全粉碎; 如果x != y,重量为x的石头被完全粉碎,重量...

小川的博客 607

Leetcode 1046.最后一块石头的重量(Last Stone Weight)

Leetcode 1046.最后一块石头的重量 1 题目描述(Leetcode题目链接)   有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果 x == y,那么两块石头都会被完全粉碎; 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。 最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。 输入:[

qq_39378221的博客 258

LeetCode:1046. Last Stone Weight最后一块石头的重量(C语言)

题目描述: 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果 x == y,那么两块石头都会被完全粉碎; 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。 最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。 示例: 输入:[2,7,4,1,8,1] 输出:1 解释: 先选出 7 和 8,得到 1,所

C/C++攻城狮 571

Last Stone Weight 最后一块石头的重量

[toc] Last Stone Weight 最后一块石头的重量 We have a collection of stone , each stone has a positive integer weight. Each turn, we choose the two heaviest stones and smash them together. Suppose the stones have weights x and y with x <= y. The result of this s

Cui's Blog 196

1049. Last Stone Weight II

We have a collection of rocks, each rock has a positive integer weight. Each turn, we chooseany two rocksand smash them together. Suppose the stones have weightsxandywithx <= y. The resul...

Do not mess it up 1187

1046. 最后一块石头的重量

题目描述: 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。那么粉碎的可能结果如下: 如果x == y,那么两块石头都会被完全粉碎; 如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。 最后,最多只会剩下一块石头。返回此石头的重量。如果没有...

wchzh2015的博客 404

[LeetCode]Last Stone Weight@Python

Last Stone Weight We have a collection of rocks, each rock has a positive integer weight. Each turn, we choose the two heaviest rocks and smash them together. Suppose the stones have weights x and y...

byr_wy的博客 354

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

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

xiaoshiguang3的博客 440

LeetCode—1046. 最后一块石头的重量(Last Stone Weight)——分析及代码(Java)

LeetCode—1046. 最后一块石头的重量[Last Stone Weight]——分析及代码[Java]一、题目二、分析及代码1. 最大堆(1)思路(2)代码(3)结果三、其他 一、题目 有一堆石头,每块石头的重量都是正整数。 每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果 x == y,那么两块石头都会被完全粉碎; 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量

江南土豆的博客 318

算法---最后一块石头的重量(Kotlin)

有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x

男儿不展风云志,空有天生八尺躯 142
上一篇: 算法-Patching Array-按要求补齐数组
下一篇: 集合-ConcurrentHashMap-线程安全底层实现
酱油瓶啤酒杯
博客等级 码龄8年 35粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值