> 백엔드 개발 > PHP 튜토리얼 > . 최대 스왑

. 최대 스왑

Linda Hamilton
풀어 주다: 2024-10-17 22:09:02
원래의
482명이 탐색했습니다.

. Maximum Swap

670. 최대 스왑

난이도:

주제: 수학, 탐욕

정수 숫자가 주어졌습니다. 최대 한 번에 두 자리 숫자를 바꿔서 최대값을 얻을 수 있습니다.

얻을 수 있는 최대 값을 반환합니다.

예 1:

  • 입력: 숫자 = 2736
  • 출력: 7236
  • 설명: 숫자 2와 숫자 7을 바꿉니다.

예 2:

  • 입력: 숫자 = 9973
  • 출력: 9973
  • 설명: 교환 불가.

제약조건:

  • 0 8

해결책:

탐욕스러운 접근 방식을 따를 수 있습니다. 단계별 설명과 해결 방법은 다음과 같습니다.

접근하다:

  1. 숫자를 배열로 변환: 숫자를 바꿔야 하므로 숫자를 숫자 배열로 변환하면 개별 숫자에 더 쉽게 접근하고 조작할 수 있습니다.
  2. 각 숫자의 가장 오른쪽 발생 추적: 각 숫자(0-9)의 가장 오른쪽 위치를 배열에 저장합니다.
  3. 최고의 스왑 기회 찾기: 왼쪽에서 오른쪽으로 숫자의 숫자를 탐색하고 각 숫자에 대해 나중에 나타나는 더 높은 숫자가 있는지 확인하세요. 그렇다면 교환하여 숫자를 최대화하세요.
  4. 스왑 및 중단 수행: 최적의 스왑을 찾으면 즉시 스왑을 수행하고 루프를 중단합니다.
  5. 배열을 다시 숫자로 변환: 교체 후 숫자 배열을 다시 숫자로 변환하여 반환합니다.

이 솔루션을 PHP로 구현해 보겠습니다. 670. 최대 스왑

<?php
/**
 * @param Integer $num
 * @return Integer
 */
function maximumSwap($num) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example usage:
echo maximumSwap(2736); // Output: 7236
echo maximumSwap(9973); // Output: 9973
?>
로그인 후 복사

설명:

  • 1단계: strval($num)은 정수를 문자열로 변환하고 str_split($numStr)은 이를 숫자 배열로 분할합니다.
  • 2단계: 마지막 배열은 0부터 9까지 각 숫자의 가장 오른쪽 인덱스를 추적합니다.
  • 3단계: 각 숫자를 반복하여 바꿀 수 있는 더 큰 숫자를 찾습니다.
  • 4단계: 적합한 더 큰 숫자가 발견되면(숫자 뒷부분에 표시됨) 숫자가 바뀝니다.
  • 5단계: 수정된 배열은 intval()을 사용하여 다시 문자열로 변환된 다음 정수로 변환됩니다.

복잡성:

  • 시간 복잡도: O(n), 여기서 n은 num의 자릿수입니다. 그 이유는 숫자를 통과하여 마지막 배열을 채우고 또 다른 통과를 통해 최적의 스왑을 찾기 때문입니다.
  • 공간 복잡도: 마지막 배열이 10개 요소로 고정되어 있으므로 O(1)(입력 크기 무시)

이 솔루션은 필요에 따라 숫자를 한 번만 바꿔 최대값을 효율적으로 찾습니다.

연락처 링크

이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!

이렇게 더 유용한 콘텐츠를 원하시면 저를 팔로우해주세요.

  • 링크드인
  • 깃허브

위 내용은 . 최대 스왑의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿