LeetCode 928 Minimize Malware Spread II | ReeeStart



LeetCode 928 Minimize Malware Spread II | ReeeStart

这题和Minimize Malware Spread I的区别是:

I: 问如果从initial中取掉一个server, 把这个server的病毒给清了, 那要对哪个server杀毒, 能使得最终Internet里被感染的结点数最少?
II: 问如果从Initial中取掉一个server, 把它从整个网络中拿掉, 要拿掉哪个server, 能使最终被感染的结点数最少?

#Solution

#Solution #1 - Union Find - Without Optimization

最简单的就是重头做N遍union-find, 每次取掉initial中的一个server. 然后每次求中毒的数量.

Time: O(N * NlogN)

#Solution #2 - Union Find Optimization

第二种解法是对上一个方法的优化, 通过观察我们可以得到, 因为只能取掉一个server:

  • 如果排除initials再union-find之后的某个component, 不包含任何initials, 则不受影响.
  • 如果排除initials再union-find之后的某个component, 只包含一个中毒server, 那么取掉这个中毒的可以使这个component不受影响.
  • 如果排除initials再union-find之后的某个component, 包含多个中毒servers, 那么取掉谁都一样. 该中毒的还是要中毒.

所以我们最终的答案, 肯定是在那些只包含一个中毒server的component里面找.


Read full article from LeetCode 928 Minimize Malware Spread II | ReeeStart


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts