Array Nesting (Leetcode 565)

1450 단어
직관 적 인 방법 은 double loop 을 가지 고 하 는 것 이다. loop 배열 을 한 다음 에 모든 요소 에 대해 깊이 있 게 다시 loop 을 찾 는 동시에 하나의 set 로 deeper loop 요 소 를 저장 하고 마지막 으로 가장 큰 set size 를 기록 하 는 것 이다. 이렇게 하면 빅 데이터 test 를 할 수 없다.
int arrayNesting(vector& nums) {
        if(nums.empty()) return 0;
        int ret_size = 0;
        for(int i=0; i 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) 을 반복 하 는 데 있다.deeper loop 의 완 성 된 수 를 - 1 로 설정 해 야 합 니 다. 그러면 중복 되 지 않 습 니 다.https://discuss.leetcode.com/topic/90538/c-java-clean-code-o-n
int arrayNesting(vector& nums) {
        if(nums.empty()) return 0;
        int ret_size = 0;
        for(int i=0; i 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;
    }

좋은 웹페이지 즐겨찾기