简单
给你一个整数数组 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 。
提示:
思路与算法:
该题目的意思就是寻找数组中的最小值和次小值,有三个解题思路(下文中的 n n n 为 p r i c e s . l e n g t h prices.length prices.length ):
很显然第三种方法是在时间和空间复杂度上均衡度最高的,我们使用一次遍历查找来实现代码。
Go代码:
func buyChoco(prices []int, money int) int {
first, second := math.MaxInt64, math.MaxInt64
for _, price := range prices {
if price < first {
first, second = price, first
} else if price < second {
second = price
}
}
if money < first+second {
return money
}
return money - first - second
}
复杂度分析: