오늘 포스팅에서는 대표적인 코딩 챌린지인 Two Sum을 풀어보겠습니다 . 대부분의 사람들에게 이 문제는 상당히 사소하지만 다른 사람들에게는 시작하기에 좋은 곳이며 특정 데이터 구조의 장점을 실제로 예시합니다. 이 기사에서 단계별 솔루션과 분석을 살펴보겠습니다.
'정수 배열 nums과 target두 숫자 의 정수 반환 인덱스가 주어지면 target'- 이 문제의 변형을 얻을 수 있지만 일반적으로 정수 목록이 포함되며 '목표'가 주어집니다. 도달할 가치. 목표 값은 목록에서 정수 2개를 더하여 구성됩니다.
이 문제를 좀 더 간단하게 만들기 위해 부과할 몇 가지 제약 조건은 다음과 같습니다.
// Some test cases to try out on your own
const twoSum = (array, target) => {
// insert your solution here
}
const arr1 = [3, 4, 5, 6, 7];
const target1 = 8;
// should return, [0,2] > 3 + 5 = 8
const arr2 = [34, 23, 35, 24, 2, 7, 11]
const target 2 = 47;
// should return, [1, 3]
const arr3 = [7,7]
const target3 = 14
// should return [0,1]
이것의 무차별 대입 방법은 중첩 루프를 만드는 것입니다. 매우 간단합니다. 주어진 배열의 각 요소(n)를 반복하고 와 같은 값을 찾는 또 다른 루프를 만듭니다 target — n . 아래와 같이 보일 것입니다.
const twoSum = (array, target) => {
for ( let i = 0; i < array.length; i++) {
for ( let j= i++; i< array.length; j++) {
if ( array[j] === target - array[i]) return [i, j]
};
};
return null;
};
2패스 및 싱글패스 접근 방식
다음 솔루션 은 해시 테이블을 사용합니다. 해시 테이블 및 그 용도에 대한 검토는 여기 에서 제 기사를 참조 하십시오 . 해시 테이블은 우리가 찾고 있는 '키'를 알고 있는 한 삽입, 삭제 및 검색이 모두 O(1) 시간에 실행되기 때문에 이 문제에서 사용할 수 있는 매우 유용한 데이터 구조입니다.
2단계 솔루션에서는 테이블을 요소: 인덱스 쌍으로 채울 것입니다. 두 번째 루프는 해시 테이블이 complement = target — hashtable[i]존재 하는지 확인하고 인덱스를 반환하고, 그렇지 않으면 num을 반환합니다.
const twoSum = (array, target) => {
const hashtable = {};
for ( let i = 0; i < array.length; i++) {
hashtable[nums[i]] = i;
};
for ( let j= 0; j< array.length; j++) {
let complement = target - array[j]
// The second condition checks for cases like twoSum([7,7], 14) where the indices of similar elements MUST be different
if ( hashtable.hasOwnProperty(complement) &&
hashtable[complement] !== j) {
return [hashtable[complement], j]
}
};
return null;
};
위의 솔루션은 보완을 확인하고 해시 테이블에 요소와 인덱스를 한 번에 추가할 수 있으므로 단일 패스 알고리즘에 더욱 최적화될 수 있습니다.
const twoSum = (array, target) => {
const hastable = {};
for ( let i = 0; i < array.length; i++) {
let complement = target - array[i];
if ( hashtable.hasOwnProperty(complement)){
return [hashtable[complement], i]
}
hashtable[array[i]] = i;
};
return null;
};
데이터 구조 시리즈가 끝나감에 따라 저는 몇 가지 인기 있는 코딩 문제를 다루고 제가 탐구하고 있는 새로운 기술에 대해 글을 쓸 것입니다.
facebook.com에 요청하면 컴퓨터가 도메인 이름을 조회하여 해당 도메인 이름을 IP 주소로 변환하므로 컴퓨터가 해당 연결을 만들 수 있습니다.
우리의 언어는 우리의 생각, 태도 및 행동을 형성할 수 있는 강력한 도구입니다. 무해해 보이는 용어도 해로운 편견과 고정관념을 영속화할 수 있습니다.
Hayden이 함께 저녁을 보낸 후 Katie를 대학 기숙사로 데려다 준 것은 자정 이후였습니다. 그녀는 아침에 일찍 수업이 있었고 전날 밤 그와 함께 지낸 후 다시 옷을 갈아입지 않았습니다.
오늘날의 초연결 세계에서 미디어 시스템은 여론을 형성하고 결과적으로 민주적 의사 결정에 중추적인 역할을 합니다. 의사소통의 정치경제학에 대한 심오한 분석에서 학자인 Robert McChesney는 기존의 통념에 도전하고 그가 미디어에 대한 "다섯 가지 진실"이라고 부르는 것을 제시합니다.
우리는 종종 우리에게 좋다고 알고 있는 것을 구현하는 데 어려움을 겪고 있습니다. 중요한 다른 사람에게 우리가 그들을 사랑한다고 말하는 것부터 해적처럼 이야기하는 것을 기억하는 것까지, 그들이 이미 그런 일을 하고 있기 때문에 하루, 일주일 또는 한 달의 이벤트가 필요하지 않다고 주장하는 사람들이 항상 있을 것입니다.
어제 우리는 스웨덴 가수 Loreen이 트로피를 집으로 가져가서 ABBA가 대회에서 우승한 지 50년 만에 스웨덴의 왕관을 다시 가져가면서 두 번 우승한 최초의 여성이 되는 반짝반짝하고 혼란스러운 그랜드 피날레로 올해 유로비전 송 콘테스트의 문을 닫았습니다. "워털루"와 함께. 그들은 계속해서 팝 음악의 정경에서 가장 큰 행위 중 하나가 되었습니다.