Array Nesting

https://www.lintcode.com/problem/array-nesting/description

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Solution {
    /**
     * @param nums: an array
     * @return: the longest length of set S
     */
    public int arrayNesting(int[] nums) {
        // Write your code here
//        和链表类似
        List> lists = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (!has(lists, i)) {
                Set set = new HashSet<>();
                int index = i;
                while (!set.contains(index)) {
                    set.add(index);
                    index = nums[index];
                }
                lists.add(set);
            }
        }
        int result = -1;
        for (int i = 0; i < lists.size(); i++) {
            Set set = lists.get(i);
            result = Math.max(result, set.size());
        }
        return result;
    }

    private boolean has(List> lists, int i) {
        for (int j = 0; j < lists.size(); j++) {
            Set set = lists.get(j);
            if (set.contains(i)) {
                return true;
            }
        }
        return false;
    }
}

你可能感兴趣的:(Array Nesting)