diff --git a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README.md b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README.md index 97d5fa881b4cf..49745e476b190 100644 --- a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README.md +++ b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README.md @@ -57,7 +57,11 @@ ## 解法 -### 方法一:排序求和 +### 方法一:排序 + 枚举 + +我们可以将所有袋子中的魔法豆按照从小到大的顺序排列,然后枚举每个袋子的魔法豆数目 $beans[i]$ 作为最终袋子中魔法豆数目,那么一共剩余的魔法豆数目为 $beans[i] \times (n - i)$,因此需要拿出的魔法豆数目为 $s - beans[i] \times (n - i)$,其中 $s$ 为所有袋子中魔法豆的总数。我们求出所有方案中需要拿出的魔法豆数目的最小值即可。 + +时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 为袋子的数目。 @@ -65,11 +69,8 @@ class Solution: def minimumRemoval(self, beans: List[int]) -> int: beans.sort() - ans = s = sum(beans) - n = len(beans) - for i, v in enumerate(beans): - ans = min(ans, s - v * (n - i)) - return ans + s, n = sum(beans), len(beans) + return min(s - x * (n - i) for i, x in enumerate(beans)) ``` ```java @@ -77,8 +78,8 @@ class Solution { public long minimumRemoval(int[] beans) { Arrays.sort(beans); long s = 0; - for (int v : beans) { - s += v; + for (int x : beans) { + s += x; } long ans = s; int n = beans.length; @@ -98,7 +99,9 @@ public: long long s = accumulate(beans.begin(), beans.end(), 0ll); long long ans = s; int n = beans.size(); - for (int i = 0; i < n; ++i) ans = min(ans, s - 1ll * beans[i] * (n - i)); + for (int i = 0; i < n; ++i) { + ans = min(ans, s - 1ll * beans[i] * (n - i)); + } return ans; } }; @@ -108,13 +111,13 @@ public: func minimumRemoval(beans []int) int64 { sort.Ints(beans) s := 0 - for _, v := range beans { - s += v + for _, x := range beans { + s += x } ans := s n := len(beans) - for i, v := range beans { - ans = min(ans, s-v*(n-i)) + for i, x := range beans { + ans = min(ans, s-x*(n-i)) } return int64(ans) } @@ -122,13 +125,12 @@ func minimumRemoval(beans []int) int64 { ```ts function minimumRemoval(beans: number[]): number { - const n = beans.length; - let sum = beans.reduce((a, c) => a + c, 0); beans.sort((a, b) => a - b); - let ans = sum; - for (let i = 0; i < n; i++) { - let num = beans[i]; - ans = Math.min(sum - num * (n - i), ans); + const s = beans.reduce((a, b) => a + b, 0); + const n = beans.length; + let ans = s; + for (let i = 0; i < n; ++i) { + ans = Math.min(ans, s - beans[i] * (n - i)); } return ans; } diff --git a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README_EN.md b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README_EN.md index b7ff70bad3fe6..2036fdd02aa17 100644 --- a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README_EN.md +++ b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/README_EN.md @@ -53,7 +53,11 @@ There are no other solutions that removes 7 beans or fewer. ## Solutions -### Solution 1 +### Solution 1: Sorting + Enumeration + +We can sort all the beans in the bags in ascending order, and then enumerate the number of beans $beans[i]$ in each bag as the final number of beans in the bag. The total remaining number of beans is $beans[i] \times (n - i)$, so the number of beans that need to be taken out is $s - beans[i] \times (n - i)$, where $s$ is the total number of beans in all bags. We need to find the minimum number of beans that need to be taken out among all schemes. + +The time complexity is $O(n \times \log n)$, and the space complexity is $O(\log n)$. Here, $n$ is the number of bags. @@ -61,11 +65,8 @@ There are no other solutions that removes 7 beans or fewer. class Solution: def minimumRemoval(self, beans: List[int]) -> int: beans.sort() - ans = s = sum(beans) - n = len(beans) - for i, v in enumerate(beans): - ans = min(ans, s - v * (n - i)) - return ans + s, n = sum(beans), len(beans) + return min(s - x * (n - i) for i, x in enumerate(beans)) ``` ```java @@ -73,8 +74,8 @@ class Solution { public long minimumRemoval(int[] beans) { Arrays.sort(beans); long s = 0; - for (int v : beans) { - s += v; + for (int x : beans) { + s += x; } long ans = s; int n = beans.length; @@ -94,7 +95,9 @@ public: long long s = accumulate(beans.begin(), beans.end(), 0ll); long long ans = s; int n = beans.size(); - for (int i = 0; i < n; ++i) ans = min(ans, s - 1ll * beans[i] * (n - i)); + for (int i = 0; i < n; ++i) { + ans = min(ans, s - 1ll * beans[i] * (n - i)); + } return ans; } }; @@ -104,13 +107,13 @@ public: func minimumRemoval(beans []int) int64 { sort.Ints(beans) s := 0 - for _, v := range beans { - s += v + for _, x := range beans { + s += x } ans := s n := len(beans) - for i, v := range beans { - ans = min(ans, s-v*(n-i)) + for i, x := range beans { + ans = min(ans, s-x*(n-i)) } return int64(ans) } @@ -118,13 +121,12 @@ func minimumRemoval(beans []int) int64 { ```ts function minimumRemoval(beans: number[]): number { - const n = beans.length; - let sum = beans.reduce((a, c) => a + c, 0); beans.sort((a, b) => a - b); - let ans = sum; - for (let i = 0; i < n; i++) { - let num = beans[i]; - ans = Math.min(sum - num * (n - i), ans); + const s = beans.reduce((a, b) => a + b, 0); + const n = beans.length; + let ans = s; + for (let i = 0; i < n; ++i) { + ans = Math.min(ans, s - beans[i] * (n - i)); } return ans; } diff --git a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.cpp b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.cpp index 773cc89b73dc5..748959a2a7c74 100644 --- a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.cpp +++ b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.cpp @@ -5,7 +5,9 @@ class Solution { long long s = accumulate(beans.begin(), beans.end(), 0ll); long long ans = s; int n = beans.size(); - for (int i = 0; i < n; ++i) ans = min(ans, s - 1ll * beans[i] * (n - i)); + for (int i = 0; i < n; ++i) { + ans = min(ans, s - 1ll * beans[i] * (n - i)); + } return ans; } }; \ No newline at end of file diff --git a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.go b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.go index 5db288dedab66..0a9dfcb9fc100 100644 --- a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.go +++ b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.go @@ -1,13 +1,13 @@ func minimumRemoval(beans []int) int64 { sort.Ints(beans) s := 0 - for _, v := range beans { - s += v + for _, x := range beans { + s += x } ans := s n := len(beans) - for i, v := range beans { - ans = min(ans, s-v*(n-i)) + for i, x := range beans { + ans = min(ans, s-x*(n-i)) } return int64(ans) } \ No newline at end of file diff --git a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.java b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.java index 878d502903fe5..122a8f35c22f8 100644 --- a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.java +++ b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.java @@ -2,8 +2,8 @@ class Solution { public long minimumRemoval(int[] beans) { Arrays.sort(beans); long s = 0; - for (int v : beans) { - s += v; + for (int x : beans) { + s += x; } long ans = s; int n = beans.length; diff --git a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.py b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.py index 96b0fb71b6cc7..2fb22831da92a 100644 --- a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.py +++ b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.py @@ -1,8 +1,5 @@ class Solution: def minimumRemoval(self, beans: List[int]) -> int: beans.sort() - ans = s = sum(beans) - n = len(beans) - for i, v in enumerate(beans): - ans = min(ans, s - v * (n - i)) - return ans + s, n = sum(beans), len(beans) + return min(s - x * (n - i) for i, x in enumerate(beans)) diff --git a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.ts b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.ts index 8c924688d12a4..485cba19d334e 100644 --- a/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.ts +++ b/solution/2100-2199/2171.Removing Minimum Number of Magic Beans/Solution.ts @@ -1,11 +1,10 @@ function minimumRemoval(beans: number[]): number { - const n = beans.length; - let sum = beans.reduce((a, c) => a + c, 0); beans.sort((a, b) => a - b); - let ans = sum; - for (let i = 0; i < n; i++) { - let num = beans[i]; - ans = Math.min(sum - num * (n - i), ans); + const s = beans.reduce((a, b) => a + b, 0); + const n = beans.length; + let ans = s; + for (let i = 0; i < n; ++i) { + ans = Math.min(ans, s - beans[i] * (n - i)); } return ans; }