美文网首页
Array Nesting (Leetcode 565)

Array Nesting (Leetcode 565)

作者: stepsma | 来源:发表于2017-05-29 07:55 被阅读0次

直观的方法就是拿double loop来做:loop数组,然后针对每一个元素往深再loop找circle,同时用一个set来存deeper loop的元素,最后记录最大的set size. 这样做过不了大数据test

int arrayNesting(vector<int>& nums) {
        if(nums.empty()) return 0;
        int ret_size = 0;
        for(int i=0; i<nums.size(); i++){
            int cur = nums[i];
            set<int> st;
            while(!st.count(cur)){
                st.insert(cur);
                cur = nums[cur];
            }
            if(st.size() > ret_size) ret_size = st.size();
        }
        return ret_size;
    }

参照网上思路后,优化点在于有的元素会被loop好多次 (比如index 1, 3, 5, 7 组成一个circle,那么会重复loop到1,3,5,7; 3,5,7; 5,7; 7)。应该把deeper loop完的数设为-1,这样就不会重复了.
https://discuss.leetcode.com/topic/90538/c-java-clean-code-o-n

int arrayNesting(vector<int>& nums) {
        if(nums.empty()) return 0;
        int ret_size = 0;
        for(int i=0; i<nums.size(); i++){
            if(nums[i] < 0) continue;
            int cur = nums[i];
            nums[i] = -nums[i];
            set<int> st;
            while(!st.count(cur) && cur >= 0){
                st.insert(cur);
                int temp = nums[cur];
                nums[cur] = -nums[cur];
                cur = temp;
            }
            if(st.size() > ret_size) ret_size = st.size();
        }
        return ret_size;
    }

相关文章

网友评论

      本文标题:Array Nesting (Leetcode 565)

      本文链接:https://www.haomeiwen.com/subject/ixdkfxtx.html