/*集合是否包含某个元素*/ func(s *IntSet)Has(x int)bool { word, bit := x/64, uint(x%64) return word < len(s.words) && s.words[word]&(1<<bit) != 0 }
/*向集合中添加元素*/ func(s *IntSet)Add(x int) { word, bit := x/64, uint(x%64) for word >= len(s.words) { s.words = append(s.words, 0) } s.words[word] |= 1 << bit }
/*集合的并集操作*/ func(s *IntSet)UnionWith(t *IntSet) { for i, tword := range t.words { if i < len(s.words) { s.words[i] |= tword } else { append(s.words, tword) } } }
/*集合的交集操作*/ func(s *IntSet)Intersection(t *IntSet) *IntSet { dest := new(IntSet) for i, tword := range t.words { if i < len(s.words) { for j := 0; j < 64; j++ { bitvalue := int64(1 << uint(j)) if (tword&bitvalue != 0) && (s.words[i]&bitvalue != 0) { for k := len(dest.words) - 1; k <= i; k++ { dest.words = append(dest.words, 0) } dest.words[i] |= bitvalue } } } } return dest } /*集合的字符串转换*/ func(s *IntSet)String()string { var buf bytes.Buffer buf.WriteByte('{') for i, word := range s.words { if word == 0 { continue }