Skip to content

Commit 97aa3b7

Browse files
authored
feat: add solutions to lc problem: No.1877 (#1061)
No.1877.Minimize Maximum Pair Sum in Array
1 parent 396ba73 commit 97aa3b7

File tree

7 files changed

+89
-52
lines changed

7 files changed

+89
-52
lines changed

solution/1800-1899/1877.Minimize Maximum Pair Sum in Array/README.md

+36-18
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,13 @@
5454

5555
<!-- 这里可写通用的实现逻辑 -->
5656

57-
排序 + 贪心。
57+
**方法一:贪心**
58+
59+
要使得数组中最大数对和的值最小,那么我们可以将数组中最小的数和最大的数配对,次小的数和次大的数配对,依此类推。
60+
61+
因此,我们可以先对数组进行排序,然后使用两个指针分别指向数组的两端,求出两个指针指向的数的和,更新最大数对和的值,然后将左指针右移一位,右指针左移一位,继续进行操作,直到两个指针相遇为止,即可得到最小的最大数对和。
62+
63+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组的长度。
5864

5965
<!-- tabs:start -->
6066

@@ -66,10 +72,8 @@
6672
class Solution:
6773
def minPairSum(self, nums: List[int]) -> int:
6874
nums.sort()
69-
res, n = 0, len(nums)
70-
for i in range(n >> 1):
71-
res = max(res, nums[i] + nums[n - i - 1])
72-
return res
75+
n = len(nums)
76+
return max(x + nums[n - i - 1] for i, x in enumerate(nums[: n >> 1]))
7377
```
7478

7579
### **Java**
@@ -80,11 +84,11 @@ class Solution:
8084
class Solution {
8185
public int minPairSum(int[] nums) {
8286
Arrays.sort(nums);
83-
int res = 0, n = nums.length;
84-
for (int i = 0; i < (n >> 1); ++i) {
85-
res = Math.max(res, nums[i] + nums[n - i - 1]);
87+
int ans = 0, n = nums.length;
88+
for (int i = 0; i < n >> 1; ++i) {
89+
ans = Math.max(ans, nums[i] + nums[n - i - 1]);
8690
}
87-
return res;
91+
return ans;
8892
}
8993
}
9094
```
@@ -96,25 +100,25 @@ class Solution {
96100
public:
97101
int minPairSum(vector<int>& nums) {
98102
sort(nums.begin(), nums.end());
99-
int res = 0, n = nums.size();
100-
for (int i = 0; i < (n >> 1); ++i) {
101-
res = max(res, nums[i] + nums[n - i - 1]);
103+
int ans = 0, n = nums.size();
104+
for (int i = 0; i < n >> 1; ++i) {
105+
ans = max(ans, nums[i] + nums[n - i - 1]);
102106
}
103-
return res;
107+
return ans;
104108
}
105109
};
106110
```
107111
108112
### **Go**
109113
110114
```go
111-
func minPairSum(nums []int) int {
115+
func minPairSum(nums []int) (ans int) {
112116
sort.Ints(nums)
113-
res, n := 0, len(nums)
114-
for i := 0; i < (n >> 1); i++ {
115-
res = max(res, nums[i]+nums[n-i-1])
117+
n := len(nums)
118+
for i, x := range nums[:n>>1] {
119+
ans = max(ans, x+nums[n-1-i])
116120
}
117-
return res
121+
return
118122
}
119123
120124
func max(a, b int) int {
@@ -125,6 +129,20 @@ func max(a, b int) int {
125129
}
126130
```
127131

132+
### **TypeScript**
133+
134+
```ts
135+
function minPairSum(nums: number[]): number {
136+
nums.sort((a, b) => a - b);
137+
let ans = 0;
138+
const n = nums.length;
139+
for (let i = 0; i < n >> 1; ++i) {
140+
ans = Math.max(ans, nums[i] + nums[n - 1 - i]);
141+
}
142+
return ans;
143+
}
144+
```
145+
128146
### **...**
129147

130148
```

solution/1800-1899/1877.Minimize Maximum Pair Sum in Array/README_EN.md

+29-17
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,8 @@ Sort & Greedy.
6060
class Solution:
6161
def minPairSum(self, nums: List[int]) -> int:
6262
nums.sort()
63-
res, n = 0, len(nums)
64-
for i in range(n >> 1):
65-
res = max(res, nums[i] + nums[n - i - 1])
66-
return res
63+
n = len(nums)
64+
return max(x + nums[n - i - 1] for i, x in enumerate(nums[: n >> 1]))
6765
```
6866

6967
### **Java**
@@ -72,11 +70,11 @@ class Solution:
7270
class Solution {
7371
public int minPairSum(int[] nums) {
7472
Arrays.sort(nums);
75-
int res = 0, n = nums.length;
76-
for (int i = 0; i < (n >> 1); ++i) {
77-
res = Math.max(res, nums[i] + nums[n - i - 1]);
73+
int ans = 0, n = nums.length;
74+
for (int i = 0; i < n >> 1; ++i) {
75+
ans = Math.max(ans, nums[i] + nums[n - i - 1]);
7876
}
79-
return res;
77+
return ans;
8078
}
8179
}
8280
```
@@ -88,25 +86,25 @@ class Solution {
8886
public:
8987
int minPairSum(vector<int>& nums) {
9088
sort(nums.begin(), nums.end());
91-
int res = 0, n = nums.size();
92-
for (int i = 0; i < (n >> 1); ++i) {
93-
res = max(res, nums[i] + nums[n - i - 1]);
89+
int ans = 0, n = nums.size();
90+
for (int i = 0; i < n >> 1; ++i) {
91+
ans = max(ans, nums[i] + nums[n - i - 1]);
9492
}
95-
return res;
93+
return ans;
9694
}
9795
};
9896
```
9997
10098
### **Go**
10199
102100
```go
103-
func minPairSum(nums []int) int {
101+
func minPairSum(nums []int) (ans int) {
104102
sort.Ints(nums)
105-
res, n := 0, len(nums)
106-
for i := 0; i < (n >> 1); i++ {
107-
res = max(res, nums[i]+nums[n-i-1])
103+
n := len(nums)
104+
for i, x := range nums[:n>>1] {
105+
ans = max(ans, x+nums[n-1-i])
108106
}
109-
return res
107+
return
110108
}
111109
112110
func max(a, b int) int {
@@ -117,6 +115,20 @@ func max(a, b int) int {
117115
}
118116
```
119117

118+
### **TypeScript**
119+
120+
```ts
121+
function minPairSum(nums: number[]): number {
122+
nums.sort((a, b) => a - b);
123+
let ans = 0;
124+
const n = nums.length;
125+
for (let i = 0; i < n >> 1; ++i) {
126+
ans = Math.max(ans, nums[i] + nums[n - 1 - i]);
127+
}
128+
return ans;
129+
}
130+
```
131+
120132
### **...**
121133

122134
```

solution/1800-1899/1877.Minimize Maximum Pair Sum in Array/Solution.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ class Solution {
22
public:
33
int minPairSum(vector<int>& nums) {
44
sort(nums.begin(), nums.end());
5-
int res = 0, n = nums.size();
6-
for (int i = 0; i < (n >> 1); ++i) {
7-
res = max(res, nums[i] + nums[n - i - 1]);
5+
int ans = 0, n = nums.size();
6+
for (int i = 0; i < n >> 1; ++i) {
7+
ans = max(ans, nums[i] + nums[n - i - 1]);
88
}
9-
return res;
9+
return ans;
1010
}
1111
};

solution/1800-1899/1877.Minimize Maximum Pair Sum in Array/Solution.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
func minPairSum(nums []int) int {
1+
func minPairSum(nums []int) (ans int) {
22
sort.Ints(nums)
3-
res, n := 0, len(nums)
4-
for i := 0; i < (n >> 1); i++ {
5-
res = max(res, nums[i]+nums[n-i-1])
3+
n := len(nums)
4+
for i, x := range nums[:n>>1] {
5+
ans = max(ans, x+nums[n-1-i])
66
}
7-
return res
7+
return
88
}
99

1010
func max(a, b int) int {
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
class Solution {
22
public int minPairSum(int[] nums) {
33
Arrays.sort(nums);
4-
int res = 0, n = nums.length;
5-
for (int i = 0; i < (n >> 1); ++i) {
6-
res = Math.max(res, nums[i] + nums[n - i - 1]);
4+
int ans = 0, n = nums.length;
5+
for (int i = 0; i < n >> 1; ++i) {
6+
ans = Math.max(ans, nums[i] + nums[n - i - 1]);
77
}
8-
return res;
8+
return ans;
99
}
1010
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
class Solution:
22
def minPairSum(self, nums: List[int]) -> int:
33
nums.sort()
4-
res, n = 0, len(nums)
5-
for i in range(n >> 1):
6-
res = max(res, nums[i] + nums[n - i - 1])
7-
return res
4+
n = len(nums)
5+
return max(x + nums[n - i - 1] for i, x in enumerate(nums[: n >> 1]))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function minPairSum(nums: number[]): number {
2+
nums.sort((a, b) => a - b);
3+
let ans = 0;
4+
const n = nums.length;
5+
for (let i = 0; i < n >> 1; ++i) {
6+
ans = Math.max(ans, nums[i] + nums[n - 1 - i]);
7+
}
8+
return ans;
9+
}

0 commit comments

Comments
 (0)