Array Nesting (Leetcode 565)

直觀的方法就是拿double loop來做:loop數(shù)組,然后針對每一個元素往深再loop找circle,同時用一個set來存deeper loop的元素,最后記錄最大的set size. 這樣做過不了大數(shù)據(jù)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;
    }

參照網(wǎng)上思路后,優(yōu)化點在于有的元素會被loop好多次 (比如index 1, 3, 5, 7 組成一個circle,那么會重復(fù)loop到1,3,5,7; 3,5,7; 5,7; 7)。應(yīng)該把deeper loop完的數(shù)設(shè)為-1,這樣就不會重復(fù)了.
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;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容