670. 최대 스왑
난이도:중
주제: 수학, 탐욕
정수 숫자가 주어졌습니다. 최대 한 번에 두 자리 숫자를 바꿔서 최대값을 얻을 수 있습니다.
얻을 수 있는 최대 값을 반환합니다.
예 1:
-
입력: 숫자 = 2736
-
출력: 7236
-
설명: 숫자 2와 숫자 7을 바꿉니다.
예 2:
-
입력: 숫자 = 9973
-
출력: 9973
-
설명: 교환 불가.
제약조건:
해결책:
탐욕스러운 접근 방식을 따를 수 있습니다. 단계별 설명과 해결 방법은 다음과 같습니다.
접근하다:
-
숫자를 배열로 변환: 숫자를 바꿔야 하므로 숫자를 숫자 배열로 변환하면 개별 숫자에 더 쉽게 접근하고 조작할 수 있습니다.
-
각 숫자의 가장 오른쪽 발생 추적: 각 숫자(0-9)의 가장 오른쪽 위치를 배열에 저장합니다.
-
최고의 스왑 기회 찾기: 왼쪽에서 오른쪽으로 숫자의 숫자를 탐색하고 각 숫자에 대해 나중에 나타나는 더 높은 숫자가 있는지 확인하세요. 그렇다면 교환하여 숫자를 최대화하세요.
-
스왑 및 중단 수행: 최적의 스왑을 찾으면 즉시 스왑을 수행하고 루프를 중단합니다.
-
배열을 다시 숫자로 변환: 교체 후 숫자 배열을 다시 숫자로 변환하여 반환합니다.
이 솔루션을 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!