Skip to content

Commit 806a5a7

Browse files
committed
feat: add solutions to lc problem: No.2195
No.2195.Append K Integers With Minimal Sum
1 parent 6b4a712 commit 806a5a7

File tree

6 files changed

+269
-2
lines changed

6 files changed

+269
-2
lines changed

solution/2100-2199/2195.Append K Integers With Minimal Sum/README.md

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,22 +42,115 @@ nums 最终元素和为 5 + 6 + 1 + 2 + 3 + 4 + 7 + 8 = 36 ,这是所有情况
4242

4343
<!-- 这里可写通用的实现逻辑 -->
4444

45+
**方法一:排序 + 贪心 + 数学**
46+
4547
<!-- tabs:start -->
4648

4749
### **Python3**
4850

4951
<!-- 这里可写当前语言的特殊实现逻辑 -->
5052

5153
```python
52-
54+
class Solution:
55+
def minimalKSum(self, nums: List[int], k: int) -> int:
56+
nums.append(0)
57+
nums.append(2 * 10**9)
58+
nums.sort()
59+
ans = 0
60+
for a, b in pairwise(nums):
61+
n = min(k, b - a - 1)
62+
if n <= 0:
63+
continue
64+
k -= n
65+
ans += (a + 1 + a + n) * n // 2
66+
if k == 0:
67+
break
68+
return ans
5369
```
5470

5571
### **Java**
5672

5773
<!-- 这里可写当前语言的特殊实现逻辑 -->
5874

5975
```java
76+
class Solution {
77+
public long minimalKSum(int[] nums, int k) {
78+
int[] arr = new int[nums.length + 2];
79+
arr[arr.length - 1] = (int) 2e9;
80+
for (int i = 0; i < nums.length; ++i) {
81+
arr[i + 1] = nums[i];
82+
}
83+
Arrays.sort(arr);
84+
long ans = 0;
85+
for (int i = 1; i < arr.length; ++i) {
86+
int a = arr[i - 1], b = arr[i];
87+
int n = Math.min(k, b - a - 1);
88+
if (n <= 0) {
89+
continue;
90+
}
91+
k -= n;
92+
ans += (long) (a + 1 + a + n) * n / 2;
93+
if (k == 0) {
94+
break;
95+
}
96+
}
97+
return ans;
98+
}
99+
}
100+
```
101+
102+
### **C++**
103+
104+
```cpp
105+
class Solution {
106+
public:
107+
long long minimalKSum(vector<int>& nums, int k) {
108+
nums.push_back(0);
109+
nums.push_back(2e9);
110+
sort(nums.begin(), nums.end());
111+
long long ans = 0;
112+
for (int i = 1; i < nums.size(); ++i)
113+
{
114+
int a = nums[i - 1], b = nums[i];
115+
int n = min(k, b - a - 1);
116+
if (n <= 0) continue;
117+
k -= n;
118+
ans += 1ll * (a + 1 + a + n) * n / 2;
119+
if (k == 0) break;
120+
}
121+
return ans;
122+
}
123+
};
124+
```
60125
126+
### **Go**
127+
128+
```go
129+
func minimalKSum(nums []int, k int) int64 {
130+
nums = append(nums, 0, 2e9)
131+
sort.Ints(nums)
132+
ans := 0
133+
for i := 1; i < len(nums); i++ {
134+
a, b := nums[i-1], nums[i]
135+
n := min(k, b-a-1)
136+
if n <= 0 {
137+
continue
138+
}
139+
k -= n
140+
ans += (a + 1 + a + n) * n / 2
141+
if k == 0 {
142+
break
143+
}
144+
}
145+
return int64(ans)
146+
}
147+
148+
func min(a, b int) int {
149+
if a < b {
150+
return a
151+
}
152+
return b
153+
}
61154
```
62155

63156
### **TypeScript**

solution/2100-2199/2195.Append K Integers With Minimal Sum/README_EN.md

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,104 @@ The sum of the six integers appended is 1 + 2 + 3 + 4 + 7 + 8 = 25, so we return
4444
### **Python3**
4545

4646
```python
47-
47+
class Solution:
48+
def minimalKSum(self, nums: List[int], k: int) -> int:
49+
nums.append(0)
50+
nums.append(2 * 10**9)
51+
nums.sort()
52+
ans = 0
53+
for a, b in pairwise(nums):
54+
n = min(k, b - a - 1)
55+
if n <= 0:
56+
continue
57+
k -= n
58+
ans += (a + 1 + a + n) * n // 2
59+
if k == 0:
60+
break
61+
return ans
4862
```
4963

5064
### **Java**
5165

5266
```java
67+
class Solution {
68+
public long minimalKSum(int[] nums, int k) {
69+
int[] arr = new int[nums.length + 2];
70+
arr[arr.length - 1] = (int) 2e9;
71+
for (int i = 0; i < nums.length; ++i) {
72+
arr[i + 1] = nums[i];
73+
}
74+
Arrays.sort(arr);
75+
long ans = 0;
76+
for (int i = 1; i < arr.length; ++i) {
77+
int a = arr[i - 1], b = arr[i];
78+
int n = Math.min(k, b - a - 1);
79+
if (n <= 0) {
80+
continue;
81+
}
82+
k -= n;
83+
ans += (long) (a + 1 + a + n) * n / 2;
84+
if (k == 0) {
85+
break;
86+
}
87+
}
88+
return ans;
89+
}
90+
}
91+
```
92+
93+
### **C++**
94+
95+
```cpp
96+
class Solution {
97+
public:
98+
long long minimalKSum(vector<int>& nums, int k) {
99+
nums.push_back(0);
100+
nums.push_back(2e9);
101+
sort(nums.begin(), nums.end());
102+
long long ans = 0;
103+
for (int i = 1; i < nums.size(); ++i)
104+
{
105+
int a = nums[i - 1], b = nums[i];
106+
int n = min(k, b - a - 1);
107+
if (n <= 0) continue;
108+
k -= n;
109+
ans += 1ll * (a + 1 + a + n) * n / 2;
110+
if (k == 0) break;
111+
}
112+
return ans;
113+
}
114+
};
115+
```
53116
117+
### **Go**
118+
119+
```go
120+
func minimalKSum(nums []int, k int) int64 {
121+
nums = append(nums, 0, 2e9)
122+
sort.Ints(nums)
123+
ans := 0
124+
for i := 1; i < len(nums); i++ {
125+
a, b := nums[i-1], nums[i]
126+
n := min(k, b-a-1)
127+
if n <= 0 {
128+
continue
129+
}
130+
k -= n
131+
ans += (a + 1 + a + n) * n / 2
132+
if k == 0 {
133+
break
134+
}
135+
}
136+
return int64(ans)
137+
}
138+
139+
func min(a, b int) int {
140+
if a < b {
141+
return a
142+
}
143+
return b
144+
}
54145
```
55146

56147
### **TypeScript**
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public:
3+
long long minimalKSum(vector<int>& nums, int k) {
4+
nums.push_back(0);
5+
nums.push_back(2e9);
6+
sort(nums.begin(), nums.end());
7+
long long ans = 0;
8+
for (int i = 1; i < nums.size(); ++i)
9+
{
10+
int a = nums[i - 1], b = nums[i];
11+
int n = min(k, b - a - 1);
12+
if (n <= 0) continue;
13+
k -= n;
14+
ans += 1ll * (a + 1 + a + n) * n / 2;
15+
if (k == 0) break;
16+
}
17+
return ans;
18+
}
19+
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
func minimalKSum(nums []int, k int) int64 {
2+
nums = append(nums, 0, 2e9)
3+
sort.Ints(nums)
4+
ans := 0
5+
for i := 1; i < len(nums); i++ {
6+
a, b := nums[i-1], nums[i]
7+
n := min(k, b-a-1)
8+
if n <= 0 {
9+
continue
10+
}
11+
k -= n
12+
ans += (a + 1 + a + n) * n / 2
13+
if k == 0 {
14+
break
15+
}
16+
}
17+
return int64(ans)
18+
}
19+
20+
func min(a, b int) int {
21+
if a < b {
22+
return a
23+
}
24+
return b
25+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public long minimalKSum(int[] nums, int k) {
3+
int[] arr = new int[nums.length + 2];
4+
arr[arr.length - 1] = (int) 2e9;
5+
for (int i = 0; i < nums.length; ++i) {
6+
arr[i + 1] = nums[i];
7+
}
8+
Arrays.sort(arr);
9+
long ans = 0;
10+
for (int i = 1; i < arr.length; ++i) {
11+
int a = arr[i - 1], b = arr[i];
12+
int n = Math.min(k, b - a - 1);
13+
if (n <= 0) {
14+
continue;
15+
}
16+
k -= n;
17+
ans += (long) (a + 1 + a + n) * n / 2;
18+
if (k == 0) {
19+
break;
20+
}
21+
}
22+
return ans;
23+
}
24+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def minimalKSum(self, nums: List[int], k: int) -> int:
3+
nums.append(0)
4+
nums.append(2 * 10**9)
5+
nums.sort()
6+
ans = 0
7+
for a, b in pairwise(nums):
8+
n = min(k, b - a - 1)
9+
if n <= 0:
10+
continue
11+
k -= n
12+
ans += (a + 1 + a + n) * n // 2
13+
if k == 0:
14+
break
15+
return ans

0 commit comments

Comments
 (0)