2010-12-10 4 views
0

빠른 방법으로 내 문제를 검색합니다.간격의 시작 값을 따르는 정렬되지 않은 직선의 숫자 얻기

숫자가 1에서 8까지의 주문 된 좌석을 상상해보십시오. 좌석 [2, 6, 5, 3]에있는 사람들이라고 상상해보십시오. 이 배열

: [2, 5, 8, 7, 1] 난 예제

명 좌석 번호 4 (개시 값)에 이어 두 번째 (+2 간격) 위로 싶어 나는 값 3 시작하고 난 +2 번 목록 제 다음 번호가 5 번째가 7이며, 이동하여이 값

반환해야있어서 동일한 [ 2, 5, 8, 7, 1], 나는 에서 시작했고 나는 +3 번 으로 이동했다.이 방법은 최소값으로 돌아 가야한다. trought 8 ... (1) ... (2) ..., 결과 : [1, 3], 4시작 +2 카운트 결과 2

와 함께 3

[5, 3, 9, 3, +1 카운트 시작 발생할 5

,536,913,632 10

[5, 3, 9], 3 계산 시작 나는 누군가가 내 문제를 이해 바랍니다 9

발생합니다.

+2

하는 것은, 예를 들어 입력에 대한 자세한 설명을 제공하는 단계를 시도하십시오 수행 될 예제 출력. –

+1

나는 당신의 모범을 실제로 따라갈 수 없었다. [1, 3]이 4를 시작한다고 말하면 4를 시작하면 무엇을 의미합니까? –

답변

4

목록을 정렬하려면 bisect을 사용하여 시작 색인을 찾은 다음 추가 결과를 목록의 길이로 수정하십시오.

+5

이 질문에 대해 기쁘게 생각합니다. :-D –

+0

1에서 8까지 숫자가 매겨진 주문석을 상상해 보라. 그들은 좌석 [2, 6, 5, 3]에있는 사람들이라고 상상해 보라. 나는 좌석 번호 4 (시작 값) 이후에 두 번째 (+2) 명을 되찾고 싶다. – Dalou

+0

@Dalou : 어떻게 내 알고리즘이 이것을하지 않습니까? –

0

그래서,이 파이썬에서 이그나시오의 알고리즘의 단지 예를 구현 기본적으로 :

from bisect import bisect 

def circular_highest(lst, start, move): 
    slst = sorted(lst) 
    return slst[(bisect(slst, start) - 1 + move) % len(lst)] 

print circular_highest([2, 5, 8, 7, 1], 3, 2) 
print circular_highest([2, 5, 8, 7, 1], 7, 3) 
print circular_highest([1, 3], 4, 2) 
print circular_highest([5, 3, 9], 3, 1) 
print circular_highest([5, 3, 9], 3, 2) 

출력 :

7 
2 
3 
5 
9 
관련 문제