花费最大金额-数组

发布时间 2023-11-02 12:23:35作者: 约拿小叶

题目:双十一众多商品进行打折销售,小明想购买自己心仪的一些物品,但由于受购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能的花完资金,现在请你设计一个程序帮助小明计算尽可能花费的最大资金数额。

输入描述

输入第一行为一维整型数组M,数组长度小于100,数组元素记录单个商品的价格,单个商品价格小于1000。
输入第二行为购买资金的额度R,R小于100000。

输出描述

输出为满足上述条件的最大花费额度。
注意:如果不存在满足上述条件的商品,请返回-1。

示例

输入:
23,26,36,27
78
输出:
76
说明:
金额23、26和27相加得到76,而且最接近且小于输入金额78
输入:
23,20,40
26
输出:
-1
说明:
因为输入的商品,无法组合出来满足三件之和小于26.故返回-1

`

public class 最大花费金额 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String[] strings = sc.nextLine().split(",");
        int[] arr = Arrays.stream(strings).mapToInt(Integer::parseInt).toArray();
        int limit = sc.nextInt();
        Arrays.sort(arr);
        //处理并排序
        //格式正确,无需考虑小于3个的情况
        int result = -1;
        //计算,双指针,固定左边两个数,遍历下一个数
        for (int i = 0; i < arr.length - 2; i++) {
            for (int j = i + 2; j < arr.length; j++) {
                int curResult = arr[i] + arr[i + 1] + arr[j];
                if (curResult > limit) {
            //因为排好序了,所以如果已经超出,则继续外层循环
                    break;
                } else {
                    result = Math.max(curResult, result);
                }
            }
        }
        System.out.println(result);
    }
}

`