Update solution 924

This commit is contained in:
YDZ
2021-04-01 18:17:34 +08:00
parent d798338426
commit 9bd6121476
2 changed files with 59 additions and 32 deletions

View File

@ -10,30 +10,43 @@ func minMalwareSpread(graph [][]int, initial []int) int {
if len(initial) == 0 {
return 0
}
uf, minIndex, count, countMap := template.UnionFind{}, 0, math.MinInt64, map[int]int{}
uf, maxLen, maxIdx, uniqInitials, compMap := template.UnionFindCount{}, math.MinInt32, -1, map[int]int{}, map[int][]int{}
uf.Init(len(graph))
for i := range graph {
for j := range graph[i] {
if i == j {
break
}
for j := i + 1; j < len(graph); j++ {
if graph[i][j] == 1 {
uf.Union(i, j)
}
}
}
for i := 0; i < len(graph); i++ {
countMap[uf.Find(i)]++
for _, i := range initial {
compMap[uf.Find(i)] = append(compMap[uf.Find(i)], i)
}
for _, v := range initial {
tmp := countMap[uf.Find(v)]
if count == tmp && minIndex > v {
minIndex = v
}
if count < tmp {
minIndex = v
count = tmp
for _, v := range compMap {
if len(v) == 1 {
uniqInitials[v[0]] = v[0]
}
}
return minIndex
if len(uniqInitials) == 0 {
smallestIdx := initial[0]
for _, i := range initial {
if i < smallestIdx {
smallestIdx = i
}
}
return smallestIdx
}
for _, i := range initial {
if _, ok := uniqInitials[i]; ok {
size := uf.Count()[uf.Find(i)]
if maxLen < size {
maxLen, maxIdx = size, i
} else if maxLen == size {
if i < maxIdx {
maxIdx = i
}
}
}
}
return maxIdx
}