> 文章列表 > 2023-spring 1. 补给马车

2023-spring 1. 补给马车

2023-spring 1. 补给马车

🍎道阻且长,行则将至。🍓


🌻算法,不如说它是一种思考方式🍀


算法专栏: 👉🏻123


一、🌱2023-spring 1. 补给马车

  • 题目描述:远征队即将开启未知的冒险之旅,不过在此之前,将对补给车队进行最后的检查。supplies[i] 表示编号为 i 的补给马车装载的物资数量。
    考虑到车队过长容易被野兽偷袭,他们决定将车队的长度变为原来的一半(向下取整),计划为:
    找出车队中 物资之和最小 两辆 相邻 马车,将它们车辆的物资整合为一辆。若存在多组物资之和相同的马车,则取编号最小的两辆马车进行整合;
    重复上述操作直到车队长度符合要求。
    请返回车队长度符合要求后,物资的分布情况。

  • 来源:力扣(LeetCode)

  • 难度:简单

  • 提示:
    2 <= supplies.length <= 1000
    1 <= supplies[i] <= 1000

  • 示例 1
    输入:supplies = [7,3,6,1,8]
    输出:[10,15]
    解释:
    第 1 次合并,符合条件的两辆马车为 6,1,合并后的车队为 [7,3,7,8];
    第 2 次合并,符合条件的两辆马车为 (7,3) 和 (3,7),取编号最小的 (7,3),合并后的车队为 [10,7,8];
    第 3 次合并,符合条件的两辆马车为 7,8,合并后的车队为 [10,15];
    返回 [10,15]
    示例 2
    输入:supplies = [1,3,1,5]
    输出:[5,5]

🌴解题

模拟

即找出数组相邻的两个数之和,对当前一轮最小的和的元素进行合并,调整之后继续直到长度满足要求(长度为原来一半)。

class Solution {public int[] supplyWagon(int[] supplies) {int lengthA= supplies.length/2;//整理后的车队长度int length= supplies.length;//原车队长度int k=1,j=1,min=0;// min - k;  i - jwhile(length>lengthA) {//对车队长度修整并递减int sum=1000000;//要求整合最小的,那我取一个最大的,来记录boolean tag=true;j=1;for (int i = 0; i < supplies.length&&j< supplies.length; i++) {//遍历车队,i j 是相邻的两辆车//1. 找车 iwhile (supplies[i]==0) {//数值为 0,表示车子已经被合并,不存在了i++;if(i>= supplies.length){tag=false;//结束标志break;}}if(!tag)//结束标志,结束 for 循环break;//2. 找车 jj=i+1;if(j>= supplies.length)break;while (supplies[j]==0) {j++;if(j>= supplies.length){tag=false;break;}}if(!tag)//结束标志,结束 for 循环break;if(supplies[i]+supplies[j]<sum){//找到较小的相邻两车min=i;k=j;sum=supplies[i]+supplies[j];}}//找到当前车队最小的相邻两车,合并supplies[min]=supplies[min]+supplies[k];supplies[k]=0;length--;}//返回新车队数组int[] ans=new int[lengthA];j=0;for (int i = 0; i < lengthA&&j< supplies.length; i++,j++) {while (supplies[j]==0)j++;ans[i]=supplies[j];}return ans;}
}

过啦!
2023-spring 1. 补给马车
2023-spring 1. 补给马车

返回第一页。☝


☕物有本末,事有终始,知所先后。🍭

🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓