电子商务网站建设的阶段化分析,东莞商城网站建设价格,建设网站费用入会计分录,四川专业网站建设1 我为什么要写这个总结
1.1 字节笔试题
小明在玩一场通关游戏#xff0c;初始血量为1#xff0c;关卡有怪兽或者有血包#xff08;正数就是血包可回血数#xff0c;负数说明是怪兽的伤害值#xff09;#xff0c;当捡到血包时会加血量#xff0c;碰到怪兽时会掉血初始血量为1关卡有怪兽或者有血包正数就是血包可回血数负数说明是怪兽的伤害值当捡到血包时会加血量碰到怪兽时会掉血现在指定初始血量为x关卡是一个数组小明必须按照数组的顺序玩游戏当碰到一个怪兽时他可以选择将这个怪兽扔到数组末尾小明可以无限次地将怪兽移到数组末尾,问小明最少移动几次就能存活,如果无论怎么移动都不能存活则返回-1 假设关卡是这样的[-200,-300,400]则返回-1假如是这样的[200,100,-250,-60,-70,100]则返回1只需要把-250挪到尾部
思路当发现自己血量不足时就从当前已经遍历过的所有关卡中选择耗费血量最多的那个关卡并且放到最后一关如果即使这样挪开了耗血量最大的一关自身血量还是为负则直接返回-1说明无法通关
2 总结
2.1 什么是局部最优
贪心关注的是局部最优这里当前最优指当前遍历的所有元素中的最优解也是局部最优的一种而一般的最有解又涉及到数据的最值而且随着元素的不断向右扩展可能这个最优值是不断变化的所以一般可以使用堆来动态维护它的最值。
3 题目
3.1 leetcode1046. 最后一块石头的重量
3.2 leetcode 1642. 可以到达的最远建筑
leetcode 1642. 可以到达的最远建筑
标准答案 //每次先放梯子当梯子数量不足时将当前使用过的梯子中替代阶梯数最少的梯子找出来用对应砖头替换替换出来的梯子拿到当前使用public int furthestBuilding(int[] heights, int bricks, int ladders) {int nheights.length;//int[]:PriorityQueueIntegerpqnew PriorityQueue((o1,o2)-(o1-o2));int i;int sum0;//表示当前需要的砖块数量for(i1;in;i){int diffheights[i]-heights[i-1];if(diff0){pq.offer(diff);if(pq.size()ladders){sumpq.poll();}if(sumbricks){return i-1;}}}return n-1;}我的答案(有几个特别长的case过不了)java
public int furthestBuilding2(int[] heights, int bricks, int ladders) {int nheights.length;PriorityQueueIntegerpqnew PriorityQueue((o1,o2)-(o1-o2));int i;for(i1;in;){int diffheights[i-1]-heights[i];// System.out.println(i:i,diff:diff,heights[i-1]:heights[i-1],heights[i]:heights[i]);if(diff0){int diffAbs-diff;if(ladders0){ladders--;pq.add(diffAbs);}else if(bricksdiffAbs){bricks-diffAbs;}else{int newdInteger.MAX_VALUE;if(!pq.isEmpty()){newdpq.peek();}if(bricksnewd){pq.poll();bricks-newd;ladders;ii-1;}else{break;}}}i;}return i-1;}这里还有一个二分查找的方法 每太整明白
3.3 871题最低加油次数和
3.4 630课程表III