Skip to content

Commit a1e8708

Browse files
committed
feat: add solutions to lc problem: No.1471
No.1471.The k Strongest Values in an Array
1 parent 72de236 commit a1e8708

File tree

6 files changed

+196
-2
lines changed

6 files changed

+196
-2
lines changed

solution/1400-1499/1471.The k Strongest Values in an Array/README.md

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,92 @@
7474

7575
<!-- 这里可写通用的实现逻辑 -->
7676

77+
**方法一:自定义排序**
78+
79+
时间复杂度 O(2nlogn)。
80+
7781
<!-- tabs:start -->
7882

7983
### **Python3**
8084

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

8387
```python
84-
88+
class Solution:
89+
def getStrongest(self, arr: List[int], k: int) -> List[int]:
90+
arr.sort()
91+
m = arr[(len(arr) - 1) >> 1]
92+
arr.sort(key=lambda x: (-abs(x - m), -x))
93+
return arr[:k]
8594
```
8695

8796
### **Java**
8897

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

91100
```java
101+
class Solution {
102+
public int[] getStrongest(int[] arr, int k) {
103+
Arrays.sort(arr);
104+
int m = arr[(arr.length - 1) >> 1];
105+
List<Integer> nums = new ArrayList<>();
106+
for (int v : arr) {
107+
nums.add(v);
108+
}
109+
nums.sort((a, b) -> {
110+
int x = Math.abs(a - m);
111+
int y = Math.abs(b - m);
112+
return x == y ? b - a : y - x;
113+
});
114+
int[] ans = new int[k];
115+
for (int i = 0; i < k; ++i) {
116+
ans[i] = nums.get(i);
117+
}
118+
return ans;
119+
}
120+
}
121+
```
122+
123+
### **C++**
124+
125+
```cpp
126+
class Solution {
127+
public:
128+
vector<int> getStrongest(vector<int>& arr, int k) {
129+
sort(arr.begin(), arr.end());
130+
int m = arr[(arr.size() - 1) >> 1];
131+
sort(arr.begin(), arr.end(), [&](int a, int b) {
132+
int x = abs(a - m), y = abs(b - m);
133+
return x == y ? a > b : x > y;
134+
});
135+
vector<int> ans(arr.begin(), arr.begin() + k);
136+
return ans;
137+
}
138+
};
139+
```
92140
141+
### **Go**
142+
143+
```go
144+
func getStrongest(arr []int, k int) []int {
145+
sort.Ints(arr)
146+
m := arr[(len(arr)-1)>>1]
147+
sort.Slice(arr, func(i, j int) bool {
148+
x, y := abs(arr[i]-m), abs(arr[j]-m)
149+
if x == y {
150+
return arr[i] > arr[j]
151+
}
152+
return x > y
153+
})
154+
return arr[:k]
155+
}
156+
157+
func abs(x int) int {
158+
if x < 0 {
159+
return -x
160+
}
161+
return x
162+
}
93163
```
94164

95165
### **...**

solution/1400-1499/1471.The k Strongest Values in an Array/README_EN.md

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,79 @@ Any permutation of [11,8,6,6,7] is <strong>accepted</strong>.
6161
### **Python3**
6262

6363
```python
64-
64+
class Solution:
65+
def getStrongest(self, arr: List[int], k: int) -> List[int]:
66+
arr.sort()
67+
m = arr[(len(arr) - 1) >> 1]
68+
arr.sort(key=lambda x: (-abs(x - m), -x))
69+
return arr[:k]
6570
```
6671

6772
### **Java**
6873

6974
```java
75+
class Solution {
76+
public int[] getStrongest(int[] arr, int k) {
77+
Arrays.sort(arr);
78+
int m = arr[(arr.length - 1) >> 1];
79+
List<Integer> nums = new ArrayList<>();
80+
for (int v : arr) {
81+
nums.add(v);
82+
}
83+
nums.sort((a, b) -> {
84+
int x = Math.abs(a - m);
85+
int y = Math.abs(b - m);
86+
return x == y ? b - a : y - x;
87+
});
88+
int[] ans = new int[k];
89+
for (int i = 0; i < k; ++i) {
90+
ans[i] = nums.get(i);
91+
}
92+
return ans;
93+
}
94+
}
95+
```
96+
97+
### **C++**
98+
99+
```cpp
100+
class Solution {
101+
public:
102+
vector<int> getStrongest(vector<int>& arr, int k) {
103+
sort(arr.begin(), arr.end());
104+
int m = arr[(arr.size() - 1) >> 1];
105+
sort(arr.begin(), arr.end(), [&](int a, int b) {
106+
int x = abs(a - m), y = abs(b - m);
107+
return x == y ? a > b : x > y;
108+
});
109+
vector<int> ans(arr.begin(), arr.begin() + k);
110+
return ans;
111+
}
112+
};
113+
```
70114
115+
### **Go**
116+
117+
```go
118+
func getStrongest(arr []int, k int) []int {
119+
sort.Ints(arr)
120+
m := arr[(len(arr)-1)>>1]
121+
sort.Slice(arr, func(i, j int) bool {
122+
x, y := abs(arr[i]-m), abs(arr[j]-m)
123+
if x == y {
124+
return arr[i] > arr[j]
125+
}
126+
return x > y
127+
})
128+
return arr[:k]
129+
}
130+
131+
func abs(x int) int {
132+
if x < 0 {
133+
return -x
134+
}
135+
return x
136+
}
71137
```
72138

73139
### **...**
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
vector<int> getStrongest(vector<int>& arr, int k) {
4+
sort(arr.begin(), arr.end());
5+
int m = arr[(arr.size() - 1) >> 1];
6+
sort(arr.begin(), arr.end(), [&](int a, int b) {
7+
int x = abs(a - m), y = abs(b - m);
8+
return x == y ? a > b : x > y;
9+
});
10+
vector<int> ans(arr.begin(), arr.begin() + k);
11+
return ans;
12+
}
13+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
func getStrongest(arr []int, k int) []int {
2+
sort.Ints(arr)
3+
m := arr[(len(arr)-1)>>1]
4+
sort.Slice(arr, func(i, j int) bool {
5+
x, y := abs(arr[i]-m), abs(arr[j]-m)
6+
if x == y {
7+
return arr[i] > arr[j]
8+
}
9+
return x > y
10+
})
11+
return arr[:k]
12+
}
13+
14+
func abs(x int) int {
15+
if x < 0 {
16+
return -x
17+
}
18+
return x
19+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public int[] getStrongest(int[] arr, int k) {
3+
Arrays.sort(arr);
4+
int m = arr[(arr.length - 1) >> 1];
5+
List<Integer> nums = new ArrayList<>();
6+
for (int v : arr) {
7+
nums.add(v);
8+
}
9+
nums.sort((a, b) -> {
10+
int x = Math.abs(a - m);
11+
int y = Math.abs(b - m);
12+
return x == y ? b - a : y - x;
13+
});
14+
int[] ans = new int[k];
15+
for (int i = 0; i < k; ++i) {
16+
ans[i] = nums.get(i);
17+
}
18+
return ans;
19+
}
20+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Solution:
2+
def getStrongest(self, arr: List[int], k: int) -> List[int]:
3+
arr.sort()
4+
m = arr[(len(arr) - 1) >> 1]
5+
arr.sort(key=lambda x: (-abs(x - m), -x))
6+
return arr[:k]

0 commit comments

Comments
 (0)