一、题目描述
给你一个整数数组 prices ,它表示一个商店里若干巧克力的价格。同时给你一个整数 money ,表示你一开始拥有的钱数。
你必须购买 恰好 两块巧克力,而且剩余的钱数必须是 非负数 。同时你想最小化购买两块巧克力的总花费。
请你返回在购买两块巧克力后,最多能剩下多少钱。如果购买任意两块巧克力都超过了你拥有的钱,请你返回 money 。注意剩余钱数必须是非负数。
示例 1:
输入:prices = [1,2,2], money = 3
输出:0
解释:分别购买价格为 1 和 2 的巧克力。你剩下 3 - 3 = 0 块钱。所以我们返回 0 。
示例 2:
输入:prices = [3,2,3], money = 3
输出:3
解释:购买任意 2 块巧克力都会超过你拥有的钱数,所以我们返回 3 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/buy-two-chocolates
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、运行结果
三、解题思路
思路比较直接,就是通过遍历一般价格数组,找出数组中最低的价格和第二低的价格,如果要使得购买后剩余的钱最多,则应该购买这两块巧克力,返回之前先比较一下这两块巧克力的价格是否比money多即可。
四、AC代码
class Solution {
public int buyChoco(int[] prices, int money) {
int len = prices.length;
if(len < 2) return money;
int min = Math.min(prices[0], prices[1]); //保存价格最低的值
int secMin = Math.max(prices[0], prices[1]);//保存价格第二低的值
for(int i=2; i<len; i++){
if(prices[i] <= min){
secMin = min;
min = prices[i];
}
else if(prices[i] <= secMin){
secMin = prices[i];
}
}
if(min + secMin > money){
return money;
}
else{
return (money - min - secMin);
}
}
}