작업
N개의 숫자가 주어집니다. 시퀀스에서 두 번째로 큰 요소를 찾습니다.
이 문제는 두 가지 해석을 허용합니다.
예를 들어
\(10\ 15\ 20\ 35\ 14\ 35\ 10\)과 같은 일련의 숫자가 주어지면 답은 무엇이어야 합니까? ?
"두 번째로 큰 요소" 아래 또는 단순히 "두 번째 최대값"은 다음과 같이 이해될 수 있습니다.
1) 모든 값을 감소하지 않는 순서로 정렬(정렬)하면 두 번째 위치에 있는 값(각 다음 값은 이전 값보다 크거나 같음). 그런 다음 고려되는 숫자 집합에 대한 대답은 값 35가 됩니다.
2) 최대값보다 큰 요소의 값. 그렇다면 정답은 20번입니다.
숫자 집합에 최대 요소가 하나만 있는 경우(다른 모든 요소는 더 적음) 두 가지 해석이 동일하며 두 경우 모두 대답이 동일하고 그렇지 않으면 대답이 달라집니다.
첫 번째 경우를 고려하십시오(
유사 코드).
답을 찾기 위해 두 가지 변수를 사용합니다.
1)
maximum1
- 최대값(첫 번째 최대값);
2)
maximum2
- 두 번째 최대값(답변).
값 변경 범위가 알려진 경우 초기 값으로 범위의 하한보다 분명히 작은 숫자를 사용합니다(예:
-1000
범위).
에서
1000
- 숫자 가져오기
-1001코드>)
값의 범위를 알 수 없는 경우 변수 max1
및 max2
의 초기 값에 처음 두 입력 숫자를 쓴 다음 이들을 비교할 수 있습니다. 두 가지 변수.
<예비>
입력 N // 숫자의 수
입력 a, b
최대1 =
최대2 = b
만약 b > 그럼
최대1 = b
최대2 =
다음으로 다른 모든 요소를 고려합니다(처음 2개는 이미 보았으므로 3번째부터 시작하겠습니다)
<예비>
i에 대한 nc는 3에서 n까지
입력
> maximum1 // maximum1보다 큰 값이 있음
저것
max2 = max1 //이전의 첫 번째 고가가 두 번째가 됨
max1 = a //새 요소가 첫 번째 최대값이 됩니다.
그렇지 않으면
//max1 이하의 다음 요소
// maximum2 값과 비교해야 함
> 최대 2
저것
max2 = a // 새 값으로 취함 max2
// 이 경우 max1은 변경되지 않습니다.
모두
모두
kts
이 알고리즘을 직접 구현해 보십시오.