Skip to content

Commit 555bfd5

Browse files
committed
feat: add solutions to leetcode problem: No.1772. Sort Features by Popularity
1 parent bb6483e commit 555bfd5

File tree

4 files changed

+123
-6
lines changed

4 files changed

+123
-6
lines changed

solution/1700-1799/1772.Sort Features by Popularity/README.md

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,27 +45,67 @@
4545
<li><code>responses[i]</code> 没有前置或后置空格。</li>
4646
</ul>
4747

48-
4948
## 解法
5049

5150
<!-- 这里可写通用的实现逻辑 -->
5251

52+
“哈希表 + 计数器”实现。
53+
5354
<!-- tabs:start -->
5455

5556
### **Python3**
5657

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

5960
```python
60-
61+
class Solution:
62+
def sortFeatures(self, features: List[str], responses: List[str]) -> List[str]:
63+
feature_set = set(features)
64+
counter = collections.Counter()
65+
for resp in responses:
66+
for feat in set(resp.split(' ')):
67+
if feat in feature_set:
68+
counter[feat] += 1
69+
order = {feat: i for i, feat in enumerate(features)}
70+
return sorted(features, key=lambda feat: (-counter[feat], order[feat]))
6171
```
6272

6373
### **Java**
6474

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

6777
```java
68-
78+
class Solution {
79+
public String[] sortFeatures(String[] features, String[] responses) {
80+
Set<String> featureSet = new HashSet<>();
81+
Map<String, Integer> order = new HashMap<>();
82+
for (int i = 0; i < features.length; ++i) {
83+
featureSet.add(features[i]);
84+
order.put(features[i], i);
85+
}
86+
87+
Map<String, Integer> counter = new HashMap<>();
88+
for (String resp : responses) {
89+
Set<String> s = new HashSet<>();
90+
String[] words = resp.split(" ");
91+
for (String word : words) {
92+
s.add(word);
93+
}
94+
for (String word : s) {
95+
if (featureSet.contains(word)) {
96+
counter.put(word, counter.getOrDefault(word, 0) + 1);
97+
}
98+
}
99+
}
100+
String[] copyFeatures = Arrays.copyOf(features, features.length);
101+
Arrays.sort(copyFeatures, (a, b) -> {
102+
// 自定义排序比较器,先按照词频大小从高到低排,若词频相等,再根据features顺序从小到大排
103+
int diff = counter.getOrDefault(b, 0) - counter.getOrDefault(a, 0);
104+
return diff == 0 ? order.get(a) - order.get(b) : diff;
105+
});
106+
return copyFeatures;
107+
}
108+
}
69109
```
70110

71111
### **...**

solution/1700-1799/1772.Sort Features by Popularity/README_EN.md

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,58 @@
4141
<li><code>responses[i]</code> has no leading or trailing spaces.</li>
4242
</ul>
4343

44-
4544
## Solutions
4645

4746
<!-- tabs:start -->
4847

4948
### **Python3**
5049

5150
```python
52-
51+
class Solution:
52+
def sortFeatures(self, features: List[str], responses: List[str]) -> List[str]:
53+
feature_set = set(features)
54+
counter = collections.Counter()
55+
for resp in responses:
56+
for feat in set(resp.split(' ')):
57+
if feat in feature_set:
58+
counter[feat] += 1
59+
order = {feat: i for i, feat in enumerate(features)}
60+
return sorted(features, key=lambda feat: (-counter[feat], order[feat]))
5361
```
5462

5563
### **Java**
5664

5765
```java
58-
66+
class Solution {
67+
public String[] sortFeatures(String[] features, String[] responses) {
68+
Set<String> featureSet = new HashSet<>();
69+
Map<String, Integer> order = new HashMap<>();
70+
for (int i = 0; i < features.length; ++i) {
71+
featureSet.add(features[i]);
72+
order.put(features[i], i);
73+
}
74+
75+
Map<String, Integer> counter = new HashMap<>();
76+
for (String resp : responses) {
77+
Set<String> s = new HashSet<>();
78+
String[] words = resp.split(" ");
79+
for (String word : words) {
80+
s.add(word);
81+
}
82+
for (String word : s) {
83+
if (featureSet.contains(word)) {
84+
counter.put(word, counter.getOrDefault(word, 0) + 1);
85+
}
86+
}
87+
}
88+
String[] copyFeatures = Arrays.copyOf(features, features.length);
89+
Arrays.sort(copyFeatures, (a, b) -> {
90+
int diff = counter.getOrDefault(b, 0) - counter.getOrDefault(a, 0);
91+
return diff == 0 ? order.get(a) - order.get(b) : diff;
92+
});
93+
return copyFeatures;
94+
}
95+
}
5996
```
6097

6198
### **...**
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public String[] sortFeatures(String[] features, String[] responses) {
3+
Set<String> featureSet = new HashSet<>();
4+
Map<String, Integer> order = new HashMap<>();
5+
for (int i = 0; i < features.length; ++i) {
6+
featureSet.add(features[i]);
7+
order.put(features[i], i);
8+
}
9+
10+
Map<String, Integer> counter = new HashMap<>();
11+
for (String resp : responses) {
12+
Set<String> s = new HashSet<>();
13+
String[] words = resp.split(" ");
14+
for (String word : words) {
15+
s.add(word);
16+
}
17+
for (String word : s) {
18+
if (featureSet.contains(word)) {
19+
counter.put(word, counter.getOrDefault(word, 0) + 1);
20+
}
21+
}
22+
}
23+
String[] copyFeatures = Arrays.copyOf(features, features.length);
24+
Arrays.sort(copyFeatures, (a, b) -> {
25+
int diff = counter.getOrDefault(b, 0) - counter.getOrDefault(a, 0);
26+
return diff == 0 ? order.get(a) - order.get(b) : diff;
27+
});
28+
return copyFeatures;
29+
}
30+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def sortFeatures(self, features: List[str], responses: List[str]) -> List[str]:
3+
feature_set = set(features)
4+
counter = collections.Counter()
5+
for resp in responses:
6+
for feat in set(resp.split(' ')):
7+
if feat in feature_set:
8+
counter[feat] += 1
9+
order = {feat: i for i, feat in enumerate(features)}
10+
return sorted(features, key=lambda feat: (-counter[feat], order[feat]))

0 commit comments

Comments
 (0)