并查集
通常用来求一个图中连通的个数。对于连通的图,会选一个节点作为他们的主节点
1.给定未排序的整数数组,找到最长连续元素序列的长度。您的算法应该以O(n)复杂度运行。(leetcode128)
对于任意一个连续的序列,其中所有节点的额主节点都是最大的那一个,所以这一题,可以用并差集的思想
class Solution { private Map<Integer, Integer> parent;//key是自己,value是主节点 public int longestConsecutive(int[] nums) { if(nums.length == 0) return 0; parent = new HashMap<>(); for(int i = 0; i < nums.length; i++) { parent.putIfAbsent(nums[i], nums[i]); } int max = 1; for(int i = 0; i < nums.length; i++) { int root = find(nums[i]); max = Math.max(max, root - nums[i] + 1); } return max; } private int find(int i) { int key = i; while(parent.containsKey(key + 1)) { int nkey = parent.get(parent.get(key + 1)); parent.put(i, nkey); key = nkey; } return key; } }
2.顺丰科技8.29的那一题。
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/11435369.html

浙公网安备 33010602011771号