算法日常训练12.5
创始人
2024-03-19 18:53:25

首先有个很大的进步,看见困难题我没选择做逃兵跑路,这点起码是进步了,虽然算法能力还是那么拉,但是起码敢不自量力地分析一下。。。还能看题解理解下。

 先找题解中最简单地一种超时方法开始理解,使用动态规划:

定义dp:dp[i]:前i个箱子所需的最小行程

初始化:明显有dp[0]=0,其他的需要选最大值,因为要维护最小值

状态转移公式:dp[i]=dp[j-1]+cost(j,i);cost(j,i)代表j到i范围内的箱子所需要的行程

cost(i,j)怎么求:首先出去和回来都需要一次行程,初始化为2,遍历范围的箱子,如果有相同连续码头的箱子,就可以一次性都放了,加1,没连续遇见一个新码头就要加1

箱子需要遍历,范围需要遍历两次,超时,但是比较好理解

class Solution {public int boxDelivering(int[][] boxes, int portsCount, int maxBoxes, int maxWeight) {int len=boxes.length;int[] dp=new int[len+1];//dp[i]:运送前i个箱子所需要的最少行程Arrays.fill(dp,Integer.MAX_VALUE);dp[0]=0;//初始化for(int i=1;i<=len;i++){int sum=0;//保证重量不超过最大值for(int j=i;j>=1&&j>=i-maxBoxes+1;j--){//保证数量不超过最大值sum+=boxes[j-1][1];//累加重量if(sum>maxWeight) break;dp[i]=Math.min(dp[i],dp[j-1]+cost(j,i,boxes));}}return dp[len];}public int cost(int l,int r,int[][] boxes){int port=2;//仓库出去和回来都要一次行程int pre=boxes[l-1][0];//记录前一个箱子目标码头while(++l<=r){//遍历这个范围的箱子if(boxes[l-1][0]==pre) continue;//和前面的箱子相同就不用行程port++;//不然就要一次行程pre=boxes[l-1][0];//更新前一个码头}return port;}
}

这里的dp可以发现是维护一个滑动窗口中的最小值,第一次见,详细分析见 力扣大佬题解 

总之就是需要优化每次找最小值的时间,我选择使用优先队列,感觉好理解一点,看了很久,这题有点超出我水平了,溜了,有缘回来再看。

class Solution {public int boxDelivering(int[][] boxes, int portsCount, int maxBoxes, int maxWeight) {int len=boxes.length;int[] dp=new int[len+1];//dp[i]:运送前i个箱子所需要的最少行程Arrays.fill(dp,Integer.MAX_VALUE);dp[0]=0;//初始化PriorityQueue q = new PriorityQueue((a, b)->a[1] - b[1]);//数组中保存的分别是i下标,最少次数,重量int dif=0;//差值int wei=0;//保存重量for(int i=1;i<=len;i++){int cur = dp[i-1] + 2;dif += i >= 2 && boxes[i - 1][0] != boxes[i - 2][0] ? 1 : 0;//如果相同,代表多加了一次行程wei += boxes[i - 1][1]; //保存重量q.add(new int[]{i, cur - dif, boxes[i - 1][1] - wei}); while (q.peek()[0] <= i - maxBoxes || q.peek()[2] + wei > maxWeight) q.poll();//超载dp[i] = q.peek()[1] + dif;             }return dp[len];}
}

经典的搜索题,写了好几遍了

遍历所有城市,使用used标志该城市是否访问过,没访问过就进行深搜,找到和他相连的城市都搜一遍。 

class Solution {boolean[] used;public int findCircleNum(int[][] isConnected) {int res=0;//记录省份数量used=new boolean[isConnected.length];for(int i=0;i

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...