Skip to content

Files

Latest commit

fa73a73 · Jan 16, 2024

History

History
This branch is 1 commit ahead of, 1328 commits behind doocs/leetcode:main.

LCP 06. 拿硬币

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Jan 16, 2024
Jan 13, 2024
Jan 13, 2024
Sep 20, 2023
Jan 13, 2024
Jan 13, 2024
Jan 13, 2024
Nov 9, 2023
Sep 20, 2023

题目描述

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

示例 1:

输入:[4,2,1]

输出:4

解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。

示例 2:

输入:[2,3,10]

输出:8

限制:

  • 1 <= n <= 4
  • 1 <= coins[i] <= 10

解法

方法一:数学

我们可以发现,每堆力扣币拿完的最少次数,等于该堆力扣币数量除以 2 向上取整的结果之和。

因此,我们只需要遍历每堆力扣币 x i ,计算每堆力扣币拿完的最少次数 x i / 2 ,然后累加即可。

时间复杂度 O ( n ) ,其中 n 是数组 c o i n s 的长度。空间复杂度 O ( 1 )

class Solution:
    def minCount(self, coins: List[int]) -> int:
        return sum((x + 1) >> 1 for x in coins)
class Solution {
    public int minCount(int[] coins) {
        int ans = 0;
        for (int x : coins) {
            ans += (x + 1) >> 1;
        }
        return ans;
    }
}
class Solution {
public:
    int minCount(vector<int>& coins) {
        int ans = 0;
        for (int x : coins) {
            ans += (x + 1) >> 1;
        }
        return ans;
    }
};
func minCount(coins []int) (ans int) {
	for _, x := range coins {
		ans += (x + 1) >> 1
	}
	return
}
function minCount(coins: number[]): number {
    let ans = 0;
    for (const x of coins) {
        ans += (x + 1) >> 1;
    }
    return ans;
}
impl Solution {
    pub fn min_count(coins: Vec<i32>) -> i32 {
        coins
            .iter()
            .map(|&x| (x + 1) >> 1)
            .sum::<i32>()
    }
}
class Solution {
    /**
     * @param Integer[] $coins
     * @return Integer
     */
    function minCount($coins) {
        $ans = 0;
        foreach ($coins as $x) {
            $ans += $x + 1 >> 1;
        }
        return $ans;
    }
}
int minCount(int* coins, int coinsSize) {
    int ans = 0;
    for (int i = 0; i < coinsSize; ++i) {
        ans += (coins[i] + 1) >> 1;
    }
    return ans;
}