3535
3636<!-- 这里可写通用的实现逻辑 -->
3737
38+ ** 方法一:数学**
39+
40+ 我们可以发现,每堆力扣币拿完的最少次数,等于该堆力扣币数量除以 $2$ 向上取整的结果之和。
41+
42+ 因此,我们只需要遍历每堆力扣币 $x_i$,计算每堆力扣币拿完的最少次数 $\left \lceil x_i/2 \right \rceil$,然后累加即可。
43+
44+ 时间复杂度 $O(n)$,其中 $n$ 是数组 $coins$ 的长度。空间复杂度 $O(1)$。
45+
3846<!-- tabs:start -->
3947
4048### ** Python3**
4452``` python
4553class Solution :
4654 def minCount (self , coins : List[int ]) -> int :
47- return sum ((coin + 1 ) // 2 for coin in coins)
55+ return sum ((x + 1 ) >> 1 for x in coins)
4856```
4957
5058### ** Java**
@@ -55,8 +63,8 @@ class Solution:
5563class Solution {
5664 public int minCount (int [] coins ) {
5765 int ans = 0 ;
58- for (int coin : coins) {
59- ans += (coin + 1 ) / 2 ;
66+ for (int x : coins) {
67+ ans += (x + 1 ) >> 1 ;
6068 }
6169 return ans;
6270 }
@@ -70,7 +78,9 @@ class Solution {
7078public:
7179 int minCount(vector<int >& coins) {
7280 int ans = 0;
73- for (int coin : coins) ans += (coin + 1) / 2;
81+ for (int x : coins) {
82+ ans += (x + 1) >> 1;
83+ }
7484 return ans;
7585 }
7686};
@@ -79,38 +89,43 @@ public:
7989### **Go**
8090
8191```go
82- func minCount(coins []int) int {
83- ans := 0
84- for _, coin := range coins {
85- ans += (coin + 1) / 2
92+ func minCount(coins []int) (ans int) {
93+ for _, x := range coins {
94+ ans += (x + 1) >> 1
8695 }
87- return ans
96+ return
8897}
8998```
9099
91- ### ** C **
100+ ### ** TypeScript **
92101
93- ``` c
94- int minCount (int* coins, int coinsSize) {
95- int res = 0;
96- for (int i = 0; i < coinsSize; i++) {
97- int coin = coins[ i] ;
98- if (coin % 2 == 1) {
99- res++;
100- }
101- res += coin / 2;
102+ ``` ts
103+ function minCount(coins : number []): number {
104+ let ans = 0 ;
105+ for (const x of coins ) {
106+ ans += (x + 1 ) >> 1 ;
102107 }
103- return res ;
108+ return ans ;
104109}
105110```
106111
107- ### **TypeScript **
112+ ### ** Rust **
108113
109- ```ts
110- function minCount(coins: number[]): number {
111- let ans = 0;
112- for (const coin of coins) {
113- ans += Math.floor((coin + 1) / 2);
114+ ``` rust
115+ impl Solution {
116+ pub fn min_count (coins : Vec <i32 >) -> i32 {
117+ coins . iter (). map (| & x | (x + 1 ) >> 1 ). sum :: <i32 >()
118+ }
119+ }
120+ ```
121+
122+ ### ** C**
123+
124+ ``` c
125+ int minCount (int* coins, int coinsSize) {
126+ int ans = 0;
127+ for (int i = 0; i < coinsSize; ++i) {
128+ ans += (coins[ i] + 1) >> 1;
114129 }
115130 return ans;
116131}
@@ -125,11 +140,11 @@ class Solution {
125140 * @return Integer
126141 */
127142 function minCount($coins) {
128- $cnt = 0;
129- for ($i = 0; $i < count($coins); $i++ ) {
130- $cnt += floor($coins[$i] / 2) + ($coins[$i] % 2) ;
143+ $ans = 0;
144+ foreach ($coins as $x ) {
145+ $ans += $x + 1 >> 1 ;
131146 }
132- return $cnt ;
147+ return $ans ;
133148 }
134149}
135150```
0 commit comments