【LeetCode】2706. 购买两块巧克力

132 阅读1分钟

题目链接

image.png

image.png

Python3

方法: 排序 O(nlogn)O(logn)O(n\log n)、O(\log n)

class Solution:
    def buyChoco(self, prices: List[int], money: int) -> int:
        prices.sort()
        temp =  money - prices[0] - prices[1]
        if temp < 0:
            return money
        else:
            return temp

⭐ 方法: 一次遍历 O(n)O(1)O(n)、O(1)

class Solution:
    def buyChoco(self, prices: List[int], money: int) -> int:
        # 1、 一次遍历 找 最小的前两个数
        m1, m2 = inf, inf  # 最小的 前两个值 m1 < m2 初始化为 无穷大, 便于 处理 prices[0]
        for price in prices:
            if price < m1:
                m2 = m1
                m1 = price 
            elif price < m2:
                m2 = price 

        temp = money - m1 - m2 
        if temp < 0:
            return money 
        else:
            return temp

C++

⭐ 方法: 一次遍历 O(n)O(1)O(n)、O(1)

class Solution {
public:
    int buyChoco(vector<int>& prices, int money) {
        int m1 = INT_MAX, m2 = INT_MAX;
        for (auto price : prices){
            if (price < m1){
                m2 = m1;
                m1 = price;
            }
            else if (price < m2){
                m2 = price;
            }
        }
        int temp = money - m1 - m2;
        if (temp < 0){
            return money;
        }else{
            return temp;
        }        
    }
};