第 25 课
1452. 收藏清单
class Solution:
def peopleIndexes(self, favoriteCompanies: List[List[str]]) -> List[int]:
ans, n = [], len(favoriteCompanies)
# f = [set(x) for x in favoriteCompanies]
f = list(map(set, favoriteCompanies))
for i, x in enumerate(f):
for j, y in enumerate(f):
if i == j: continue
if x.issubset(y): break
else:
ans.append(i)
return ans
class Solution {
public List<Integer> peopleIndexes(List<List<String>> f) {
List<Integer> res = new ArrayList<>();
List<HashSet<String>> s = new ArrayList<>();
for (List list : f) s.add(new HashSet(list)); // 增强 for
// f.forEach(x ->{s.add(new HashSet(x));}); // List.forEach
int i = -1;
sign:
for (Set a : s){
// for (List a : f){
i++;
for (HashSet<String> b : s) {
// for (List b : f){
if (a.size() >= b.size()) continue;
if (b.containsAll(a)) continue sign;
}
res.add(i);
}
return res;
}
}
2248. 多个数组求交集
class Solution:
def intersection(self, nums: List[List[int]]) -> List[int]:
s = set(nums[0])
for x in nums:
s &= set(x)
return sorted(s)
class Solution {
public List<Integer> intersection(int[][] nums) {
Set ans = new HashSet();
for (int x : nums[0]) ans.add(x);
for (int i = 1; i < nums.length; i++){
Set tmp = new HashSet();
for (int x : nums[i]) tmp.add(x);
ans.retainAll(tmp);
}
List res = new ArrayList(ans);
Collections.sort(res);
return res;
// List ans = new ArrayList();
// for (int x : nums[0]) ans.add(x);
// for (int i = 1; i < nums.length; i++){
// List tmp = new ArrayList();
// for (int x : nums[i]) tmp.add(x);
// ans.retainAll(tmp);
// }
// Collections.sort(ans);
// return ans;
}
}
基础知识
Java 遍历 Set 集合的方法
Set 和 List 遍历方式基本一致,Set 没有 for i 的遍历方式
1、迭代器 iterator
Set<Integer> set = new HashSet<>();
for (Iterator<Integer> it = set.iterator(); it.hasNext();) {
it.next();
}
Iterator<Integer> it = set.iterator();
while (it.hasNext()) {
it.next();
}
2、增强 for
Set<Integer> set = new HashSet<>();
for (int item : set) {
// System.out.println(item);
}
3、set.forEach
Set<Integer> set = new HashSet<>();
set.forEach(item -> {
// System.out.println(item);
});
4、set.stream().forEach
Set<Integer> set = new HashSet<>();
set.stream().forEach(item -> {
// System.out.println(item);
});
JAVA Set 交集,差集,并集
import java.util.HashSet;
import java.util.Set;
Set<String> res = new HashSet<String>();
Set<String> a = new HashSet<String>() {
{
add("python");
add("java");
add("c++");
add("javascript");
}
};
Set<String> b = new HashSet<String>() {
{
add("python");
add("java");
add("C#");
}
};
res.clear();
res.addAll(a);
res.retainAll(b);
System.out.println("交集:" + res);
res.clear();
res.addAll(a);
res.removeAll(b);
System.out.println("差集:" + res);
res.clear();
res.addAll(a);
res.addAll(b);
System.out.println("并集:" + res);
Java ArrayList retainAll() 方法
retainAll() 方法用于保留 arraylist 中在指定集合中也存在的那些元素,也就是删除指定集合中不存在的那些元素。
arraylist.retainAll(Collection c);
注:arraylist 是 ArrayList 类的一个对象。
参数说明:collection - 集合参数
返回值:如果 arraylist 中删除了元素则返回 true。
如果 arraylist 类中存在的元素与指定 collection 的类中元素不兼容,则抛出 ClassCastException 异常。
如果 arraylist 包含 null 元素,并且指定 collection 不允许 null 元素,则抛出 NullPointerException 。