PHP는 매우 일반적으로 사용되는 서버 측 스크립팅 언어입니다. 우리는 개발 과정에서 배열을 자주 사용합니다. 배열에서는 합계가 고정된 값과 같은 배열의 두 숫자 조합을 계산하는 방법과 같은 몇 가지 문제에 직면하게 됩니다. 이는 매우 일반적인 문제이며, 이 기사에서는 이를 해결하는 방법을 소개합니다.
1. 문제 설명
정수 배열 nums와 정수 target이 주어지면 합계가 target과 같은 두 숫자를 배열에서 찾습니다.
예를 들어 nums = [2, 7, 11, 15], target = 9인 경우 nums [0] + nums [1] = 2 + 7 = 9이므로 [0, 1]이 반환됩니다.
2. Solution
이 문제를 해결하기 위해 이중 루프 방법을 사용할 수 있지만 시간 복잡도가 너무 높고 효율적이지 않습니다. 더 효율적인 방법은 다음과 같습니다. 해시 테이블을 사용하는 것입니다.
순회된 숫자를 해시 테이블에 저장하고 대상에서 현재 숫자를 뺀 숫자와 동일한 다른 숫자가 해시 테이블에 있는지 확인할 수 있습니다. 존재하는 경우 두 숫자의 합을 대상으로 얻을 수 있습니다.
구체적인 구현은 다음과 같습니다.
function twoSum($nums, $target) { $map = []; $len = count($nums); for ($i = 0; $i < $len; $i++) { $diff = $target - $nums[$i]; if (isset($map[$diff])) { return [$map[$diff], $i]; } $map[$nums[$i]] = $i; } return [-1, -1]; } $nums = [2, 7, 11, 15]; $target = 9; $res = twoSum($nums, $target); print_r($res);
3. 코드 설명
1. 먼저 해시 테이블 $map을 정의하고 빈 배열로 초기화합니다.
2. 그런 다음 배열 $nums와 대상 값 $target을 정의하고 $len은 배열 길이입니다.
3. 다음으로 for 루프를 사용하여 $nums 배열을 순회합니다. 숫자를 순회할 때마다 대상 값 $target에서 숫자를 뺀 결과는 $diff입니다.
4. $diff와 동일한 $map에 다른 숫자가 있으면 두 숫자의 합이 $target임을 의미하며 이 두 숫자의 인덱스를 반환할 수 있습니다.
5. 존재하지 않으면 통과한 번호를 $map에 저장하고 다음 사이클로 진행합니다.
6. 마지막으로 전체 루프에서 요구 사항을 충족하는 숫자 조합이 발견되지 않으면 [-1, -1]이 반환됩니다.
4. 요약
이 글에서는 PHP 배열에 있는 두 숫자의 합이 고정된 값과 같다는 문제를 해결하기 위해 해시 테이블을 사용하는 방법을 소개합니다. 해시 테이블을 사용하면 하나의 루프에서 요구 사항을 충족하는 숫자 조합을 O(n)의 시간 복잡도로 찾을 수 있습니다.
또한 배열이 비어 있고 길이가 1인 경우와 같은 일부 극단적인 경우에도 주의할 필요가 있습니다.
이 글이 PHP를 처음 접하는 독자들에게 도움이 되기를 바랍니다.
위 내용은 PHP에서 고정 값과 동일한 배열의 두 숫자의 합을 계산하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!