购买水果最便宜的方案
前言
近期再刷算法题,所以会发布一些个人关于算法题的解题思路,欢迎大家指教。
一、题目描述
有m个水果超市在1-n个小时的不同时间段提供不同价格的打折水果,如果某餐厅每个小时都要新采购一种水果给餐厅使用的话, 请选出n个小时内,采购水果的最便宜的花费总和。 (假设m个超市打折时间段可以覆盖n小时)。
二、输入描述
N — 总小时数n
m — 水果超市个数m
X[0]x[1]x[2]—第2-m + 1行:每行长度为3的数组,代表各超市在x[0]-x[1]小时(包含[x1])提供价格为x2的水果。
范围提示: 1 <= n < 2^10 (1024)。
三、输出描述
采购水果的最便宜的花费总和。
1、输入
4
6
2 3 10
2 4 20
1 3 15
1 4 25
3 4 8
1 4 16
2、输出
41
3、说明
第1小时选15元的水果,第2小时10元水果,第3选8元水果,第4 小时选8元水果,共15+10+8+8=41。
四、java代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/**
* 1.保存所有的超市的打折水果
* 2.通过餐厅所需要的时间段,然后遍历,从打折水果集合中进行判断,获取当前时间段对应最小的价格
* 3.在循环中找到最小的价格之后直接进行求和
*/
int N = Integer.parseInt(scanner.nextLine());
int m = Integer.parseInt(scanner.nextLine());
List<Integer[]> list = new ArrayList<>();
for (int i = 0; i < m; i++) {
Integer[] array = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).boxed().toArray(Integer[]::new);
//保存每个水果店的提供的时间段内的价格区间
list.add(array);
}
//初始化总价格
int sum = 0;
for (int i = 1; i <= N; i++) {
//初始化该时间点的最小价格
int min = 0;
for (Integer[] arr : list){
Integer key = arr[2];//获取价格
//如果当前时间在区间内,则获取该区间价格进行比较
if(i>=arr[0] && i<= arr[1]){
if(min == 0 || min > key){
min = key;
}
}
}
//对每个时间点的最小价格进行求和
System.out.println("当前时间点:"+i +" 最小价格为:"+min);
sum += min;
}
System.out.println("每个时间段最小价格总和: "+sum);
}
五、测试用例
输入1:
4
6
2 3 10
2 4 20
1 3 15
1 4 25
3 4 8
1 4 16
输出:
输入2:
4
3
1 4 15
2 4 15
1 2 8
输出: