Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /