Java 第 25 课 1452. 收藏清单 2248. 多个数组求交集

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 。

猜你喜欢

转载自blog.csdn.net/weixin_43955170/article/details/124065329