>  기사  >  백엔드 개발  >  PHP를 사용하여 leetcode179 최대 개수를 구현하는 방법

PHP를 사용하여 leetcode179 최대 개수를 구현하는 방법

PHPz
PHPz원래의
2023-04-19 10:04:59371검색

문제 설명:

음수가 아닌 정수 집합이 주어지면 순서를 재정렬하여 가장 큰 정수를 형성하세요.

예 1:

입력: [10,2]
출력: 210

예 2:

입력: [3,30,34,5,9]
출력: 9534330
설명: 출력 결과는 다음과 같을 수 있습니다. 매우 크므로 정수 대신 문자열을 반환해야 합니다.

질문 해결 아이디어:

이 질문은 간단한 정렬 문제이지만 정렬 비교 방법에 특정 변경이 필요합니다. 왜냐하면 우리가 형성해야 하는 것은 소수가 아닌 최대값이기 때문에 정렬 방법.

두 숫자를 연결하여 두 숫자의 크기를 비교할 수 있습니다. A + B > B + A이면 A의 가중치가 B의 가중치보다 크다고 생각합니다. 예를 들어 2와 10, 2 + 10 = 210, 10 + 2 = 102인 경우 2의 가중치가 10보다 크다고 판단할 수 있습니다.

특정 알고리즘 구현의 경우 퀵 정렬을 사용하여 배열을 나눌 때마다 서로 이어졌을 때 가장 큰 숫자가 형성되도록 비교 방법을 판단합니다.

코드 구현:

class 솔루션 {

/**
 * @param Integer[] $nums
 * @return String
 */
function largestNumber($nums) {
    if (empty($nums)) {
        return '';
    }

    $this->quickSort($nums, 0, count($nums) - 1);

    $result = implode('', $nums);

    return $result[0] == '0' ? '0' : $result;
}

function quickSort(&$nums, $left, $right) {
    if ($left >= $right) {
        return;
    }

    $mid = $this->partition($nums, $left, $right);

    $this->quickSort($nums, $left, $mid - 1);
    $this->quickSort($nums, $mid + 1, $right);
}

function partition(&$nums, $left, $right) {
    $pivot = $nums[$right];
    $i = $left - 1;

    for ($j = $left; $j < $right; $j++) {
        if ($this->cmp($nums[$j], $pivot) > 0) {
            $i++;
            $this->swap($nums, $i, $j);
        }
    }

    $i++;
    $this->swap($nums, $i, $right);

    return $i;
}

function swap(&$nums, $i, $j) {
    $tmp = $nums[$i];
    $nums[$i] = $nums[$j];
    $nums[$j] = $tmp;
}

function cmp($a, $b) {
    return strval($a) . strval($b) > strval($b) . strval($a) ? 1 : - 1;
}

}

$solution = new Solution();

$nums1 = [10, 2];
$result1 = $solution-> maximumNumber($nums1);
print('결과 1: ' . $result1 . "n");

$nums2 = [3, 30, 34, 5, 9];
$result2 = $solution->largestNumber ($nums2);
print('Result 2: ' . $result2 . "n");

?>

결론:

이 질문의 시간 복잡도는 O(nlogn)이며, 정렬 알고리즘이 사용되었습니다. 퀵 정렬이다. 정렬할 때 우리가 사용하는 비교 방법은 접합 결과를 문자열 형태로 비교하여 최종 값이 가장 큰지 확인하는 것입니다.

위 내용은 PHP를 사용하여 leetcode179 최대 개수를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.