按受欢迎程度排列功能
难度:
标签:
题目描述
代码结果
运行时间: 87 ms, 内存: 18.9 MB
/*
思路:
我们使用Java Stream API来对功能进行排序。创建一个功能类,并使用Stream的sorted方法对功能列表进行排序。使用Comparator来比较受欢迎程度,并通过Stream API进行排序和收集。
*/
import java.util.*;
import java.util.stream.Collectors;
class Feature {
String name;
int popularity;
public Feature(String name, int popularity) {
this.name = name;
this.popularity = popularity;
}
}
public class Solution {
public static List<Feature> sortFeatures(List<Feature> features) {
return features.stream()
.sorted((f1, f2) -> Integer.compare(f2.popularity, f1.popularity)) // 降序排列
.collect(Collectors.toList());
}
public static void main(String[] args) {
List<Feature> features = new ArrayList<>();
features.add(new Feature("FeatureA", 50));
features.add(new Feature("FeatureB", 70));
features.add(new Feature("FeatureC", 30));
List<Feature> sortedFeatures = sortFeatures(features);
sortedFeatures.forEach(feature -> System.out.println(feature.name + ": " + feature.popularity));
}
}
解释
方法:
此题解的思路是利用Python内置的collections.Counter类来统计所有响应中各单词出现的次数,然后根据提供的特征列表对特征进行排序。首先,将所有响应分割成单词,并使用set来去除每个响应中的重复单词,确保每个响应对特征的贡献是一次。然后,通过更新Counter对象,对每个特征在所有响应中出现的次数进行统计。最后,使用sorted函数对特征进行排序,排序的关键依据是每个特征的出现次数(从大到小)。
时间复杂度:
O(m*k + n log n)
空间复杂度:
O(u + k)
代码细节讲解
🦆
在解法中使用`set(s.split())`去除每个响应中的重复单词,这种做法是否会导致某些特征的重要性被低估?
▷🦆
对于`ct.update(set(s.split()))`这一操作,为什么选择在分割单词后立即使用set进行去重,而不是在统计完所有响应后去重?
▷🦆
在排序特征时使用了`lambda x: -ct[x]`作为排序的关键。这种取负值的方式是为了什么?是否有其他方式可以达到相同的排序效果?
▷