- 저우 경주 요약
- 나쁜 나쁜 재단, 주로 C ++ 템플릿 프로그래밍, C, 같은 언어의 기본 구문, 그래서 아무 문제가, STL 템플릿의 사용을 포함, 바이 쓰는 동안, 망치를 할 수있는, 눈을 멀게 봐! ! ! !
- 벡터 템플릿 : 벡터 <INT> nums (10, 0)의 벡터 템플릿 선언 정수의 1 차원 배열을 이용하여 초기화
-
- 벡터 <벡터 <INT >> DP (100 <벡터 <INT >> (2, 0))는 2 차원 배열은 벡터, 2 * 100 사이즈를 0으로 초기화된다 정의한
-
이 2 차원 배열의 경우 적어도 20 분 낭비! ! !
- 하위 문자열 및 서브는 순수 문자열 연속 순서가 연속적이지입니다, 말씀, 당신이 명심해야 할 중요한 것은, 나는 세 번하지 않습니다.
서브 타이틀 시퀀스는 적어도 20 분 낭비, 문자열을 할 수 있습니다.
- unordered_map도, 나는 적어도 5 분 동안 검색, 사전에이 볼 수있는 키를 몰라! ! !
사용자 정의 템플릿 반복자 :
unordered_map도 <INT, INT> :: IT를 반복자;
map.find ()
함수가 있는지 열쇠 : IF (
map1.find (ARR [I]) == map1.end ()
)
그것은 볼 수 있습니다 : 리턴 키를 반복자는 map.end를 반환하는 키가 아닌 경우 ()
지도 탐색 : 그것은 액세스 키를 반복자, 값 :
IT-> 제 IT-> 제
- 윈도우 방법을 슬라이딩 , 아직 능숙하지 않다 강화 운동이 필요합니다! ! !
처음 내지 : 2 차원 배열이 수행 DP
클래스 해결 { 공개 : INT의 equalSubstring ( 문자열 S, 문자열 T, int로 maxCost)을 { INT MAX_LEN = 0 ; 벡터 < INT >를 nums (t.size (), 0 ); // 1 차원 배열 벡터 <벡터 < INT >> DP는 (t.size (), 벡터 < INT > ( 2 , 0 )); // 2 차원 어레이 및 초기화 벡터 에 대한이 ( int로 난 = 0 ; I는 s.size () "; ++ I) { nums을 [I ]ABS는 = (S는 [나는] - T는 [내가]); } // DP DP 초기화 배열 초기화는 신중 매우 중요합니다! ! ! IF 합니다 (nums가 [ 0 ] <= maxCost)는 { DP가 [ 0 ] [ 0 ]을 nums가 = [ 0 ] DP [ 0 ] . 1 ] = 1이다. ] MAX_LEN =를 . 1 ; } 대 ( INT I = 1. , I는 S를 <. 크기 (); ++ I) { IF (DP [I- . 1 ] [ 0 ] +를 nums [I] <= 0 maxCost) { DP가 [I]를 [ ;= DP [Ⅰ- 1 ] [ 0 ] + nums [I]; DP가 [I] [ 1 ]을 DP = [I- 1 ] [ 1 ] + 1 ; } 다른 { INT TMP = DP [Ⅰ- 1 ] [ 0 ], J; 에 대한 (j = 1-DP [Ⅰ- 1 ] [ 1 ] J <= 1; ++ j)는 { TMP - = nums [J] 경우 (TMP + nums [I] <= maxCost) 체류 } DP [I]0 ]의 tmp = +의 nums [I]을; DP [I] [ 1 ] = 1 - J; } MAX_LEN = 최대 (MAX_LEN, DP [I] [ 1 ]); } 반환 MAX_LEN; } };
문자열이 연속이기 때문에 할 슬라이딩 윈도우 방법을 사용하여 생각하기 쉽고, 요소> = 0, 슬라이딩 윈도우의 반환하지 않습니다! ! !
클래스 해결 { 공개 : INT의 equalSubstring ( 스트링 들, 스트링 t, int로 maxCost)을 { INT MAX_LEN = 0 ; 벡터 < INT > nums (s.size (), 0 ); 위한 ( int로 난 = 0 ; i가 s.size ()을 <; ++ I) nums [I] = ABS (S [I] - t [I]); INT 시작 = 0 , 최종 = 0 , sum_tmp = 0 ; 대 (말단 <s.size (); ++ 단부) { sum_tmp + = nums [END]; 경우 (sum_tmp <= maxCost) 계속 ; 또 { MAX_LEN = 최대 (MAX_LEN, 최종 개시); 반면 (sum_tmp> maxCost) { sum_tmp = 된 - ; nums는 [시작] ++ 시작; } } } 반환 최대 (MAX_LEN, 최종 시작) } };
분명히 더 나은 슬라이딩 윈도우 방법입니다 사용,
명확하고 간결한 코드, 시간과 공간의 복잡성이 크게 완벽 해 감소! ! ! .