leetCode 시리즈 1, 두 숫자

두 번호와

1, 두 숫자

설명 : 감안할 때 정수 배열 nums 및 목표 값 목표 및 배열의 ​​두 정수의 목표 값을 식별하고 그 배열 첨자로 돌아 부탁드립니다. 각 입력이 하나의 답에 해당하는 것으로 가정 할 수있다. 그러나 같은 배열 요소를 다시 사용할 수 없습니다.


문제 해결 방법 세 가지 종류의 해석

도 코드 1에 도시 된 바와 같이, 두 번주기를 살펴보면, 무작위을 사용하여, 각각의 데이터는 잔여 개수를 발견하고 전류 I로부터 제 2 층 traversal 사이클 (참고를 사용하여 이송 제 1 층을 통과한다 + 1 시작, 그렇지 않으면 발견 후 루프를 종료합니다 직접 반환 후) 같은 인덱스 값이 존재 할 수 있으며,이 방법은 분명히 내가 <J를 알 수 있습니다.

(2)가, 오브젝트 데이터 저장소를 사용하는 목적은, 데이터가 제 맵에 값 키를 저장하고, 색인 지수 나머지 결과를 찾았 피사체에 존재하지 후 발견 나는 동일한이라면 통과하는 값이며 출구는 있지만 출구 많은 종류의 소형에주의하십시오.

3 원칙 위에서뿐만 아니라지도 데이터 스토리지의 데이터 구조를 사용하여 데이터를 먼저지도에 저장 한 다음 한 번 횡단 직접 ​​볼 수있다.

var twoSum = function(nums, target) {
    // 暴力解决
    // for (let i = 0; i < nums.length; i++) {
    //     let left = target - nums[i];
    //     for (let j = i + 1; j < nums.length; j++) {
    //         if (nums[j] === left) {
    //             return [i, j]
    //         }
    //     }
    // }
    //使用map实现
    // let map = {};
    // for (let i = 0; i < nums.length; i++) {
    //     map[nums[i]] = i;
    // }
    // for (let i = 0; i < nums.length; i++) {
    //     let left = target - nums[i];
    //     if (map[left] && map[left] !== i) {
    //         return [map[left], i].sort((a, b) => a - b);
    //     }
    // }

    // Map
    let map = new Map();
    for (let i = 0; i < nums.length; i++) {
        map.set(nums[i], i);
    }
    for (let i = 0; i < nums.length; i++) {
        let left = target - nums[i];
        if (map.get(left) && map.get(left) !== i) {
            return [map.get(left), i].sort((a, b) => a - b);
        }
    }
};

심각한 학습 알고리즘, 매일 질문 일반적인 개발 및 발전을 바랍니다.

게시 19 개 원래 기사 · 원 찬양 58 ·은 50000 +를 볼

추천

출처blog.csdn.net/cyg_l02/article/details/105353542