두 번호와
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);
}
}
};
심각한 학습 알고리즘, 매일 질문 일반적인 개발 및 발전을 바랍니다.