Leetcode - 두 숫자 Ⅰ

두 숫자의 합계 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를 실행

 

추천

출처www.cnblogs.com/shawn-young/p/12359469.html