두 숫자의 합계 1
주제 설명 : 정수의 배열을 지정해 nums
및 목표 값을 target
, 당신은 찾을 수의 배열의 목표 값 이 개 자신의 배열 첨자로 정수 및 반환.
예 : 주어 nums = 2, 7, 11 , 15], 목표 = 9 때문에 nums [0] + nums [1 ] = 2 + 7 = 9 반환 [0, 1]
문제 해결 아이디어 :
(1) 브 루트 포스 : 해결 문제의 핵심은 DIFF는 목록을 찾고 있는지, DIFF = 타겟 NUM1이다.
클래스 해결책 : DEF twoSum (자기, nums리스트 [INT] 대상 : INT) -> 리스트 [INT] 길이 = 렌 (nums) 에 대한 I, 값 의 열거 (nums) DIFF = 목표 - 값 J = I +1 동안 J < 길이 경우 nums [J] == DIFF : 리턴 [내가 J] J = J + 1
1000 밀리 초 이상 시간을 실행, 카자흐스탄 최적화를 고려
(2) 분류 헤드 및 테일 포인터가 조회 + : 먼저, 정렬리스트의 순서리스트에 대응하는 각 요소의 기록 위치하지만,이 목록은 원래의 변경되지 않는다.
예를 들어, [3,2,5] 함수가 정렬 된 후 [1,0,2]
클래스 해결책 : DEF twoSum (자기, nums리스트 [INT] 대상 : INT) -> 리스트 [INT] sort_list = 정렬 (범위 (렌 (nums)), 키 = 람다 X : nums [X]) # 对于nums中的元素按升序进行排序 시작 = 0 단부 = 렌 (nums) -1 하면서 시작 < 단부 : add_up = nums가 [sort_list는 [시작] + nums [sort_list [END] 경우 add_up == 대상 : 창 ([ sort_list, sort_list [END]) 시작] ELIF add_up < : 타겟 시작+ = 1 ELIF의 add_up> 타겟 : 엔드 - = 1
시간 36ms 실행 속도도 좋다
참고 여기에 문제가 있음 : A.의 사용 정렬 () 함수는 분류 (반복자, /, *, 키 = 없음, 역 = 거짓)
B. 람다 익명 기능 키 = 람다 X : nums [X]는 오름차순 [X] 프레스 nums를 나타낸다.
예를 들어, [3,2,5,4] sort_list [1,0,3,2] sort_list 즉 요소 nums 인덱스들의리스트에 따라 오름차순으로한다.
(3) 해결하기 위해 해시 테이블을 이용하여 , 각 소자에 대응 DIFF가 다른리스트에는 DIFF 키 (키)와 대응하는 키 값을하기 위해 해시 테이블 (사전)의 개념을 사용하여 특정 지수. 따라서 해시 테이블을 검색하여 대상을 찾을 수 있습니다.
해시 테이블의 요소는 다음 복귀 [요소의 첨자는 원소의 해시 테이블의 값에 대응하는] 경우에는 원래리스트의 각 요소를 통해 루프
클래스 해결책 : DEF twoSum (자기, nums리스트 [INT] 대상 : INT) -> 리스트 [INT] 해시 맵 = {} # 记录每一个位置与대상的差值 위한 I, 값 의 열거 (nums) 만약 값 의 해시 맵 : 창 ([hashmap.get (값), I]) 해시 맵 [목표 - 값 = I
시간 68ms를 실행