网站开发的安全性原则,企业网站建设报价方案,网站优化外包公司,技术支持 骏域网站建设专家佛山2024.2.6 题目来源我的题解方法一 贪心优先队列 题目来源
力扣每日一题#xff1b;题序#xff1a;LCP 30
我的题解
方法一 贪心优先队列 思路#xff1a;使用贪心的思想#xff0c;从左到右遍历#xff0c;若遇到加上当前房间的生命值后小于等于0#xff0c;由于需要… 2024.2.6 题目来源我的题解方法一 贪心优先队列 题目来源
力扣每日一题题序LCP 30
我的题解
方法一 贪心优先队列 思路使用贪心的思想从左到右遍历若遇到加上当前房间的生命值后小于等于0由于需要调整的次数最小则贪心地将当前以及前面房间中生命值最小的移到末尾。直到遍历完所有房间。 具体在遍历房间的过程中将为负数的生命值加入到一个小根堆pq中当计算完每个房间的生命值sum影响后如果生命值sum小于等于0则将堆顶元素取出并使用外的变量other记录从小根堆pq中取出元素的和这时需要在生命值中补回相应的生命值以及调整次数加1。当遍历完所有房间有再将other的值重新加入到sum中若最终的sum小于等于0则表示无解。 时间复杂度O(nlogn)。需要遍历一次数组O(n)并且遍历过程中存在优先队列的入队和出队操作O(logn) 空间复杂度O(n)。最多所有的元素都为负数。 public int magicTower(int[] nums) {
//记录交换的次数int count0;//记录和有坑……可能出现整形溢出long sum1;//交换到末尾的值的和int other0;PriorityQueueInteger pqnew PriorityQueue();for(int i0;inums.length;i){int tnums[i];//若为负数加入到小根堆if(t0)pq.offer(t);//更新和sumt;//判断更新后的和是否小于等于0if(sum0){int temppq.poll();//补回生命值sum-temp;//交换到末尾的和othertemp;count;}}//最终加上交换到末尾的负数和sumother;return sum0?count:-1;
}有任何问题欢迎评论区交流欢迎评论区提供其它解题思路代码也可以点个赞支持一下作者哈~