최상의 성능을 나타내는 최적의 솔루션은 상수 요소까지 linear O (n)입니다.
이것은 배열에있는 요소의 수에 비례하는 시간을 의미합니다 (물론 적어도 배열의 모든 요소를 읽어야하므로 가장 좋은 방법입니다. 이미 O (n) 시각).
int mindiff(const vector<int>& v)
{
IntRadixSort(v.begin(), v.end());
int best = MAX_INT;
for (int i = 0; i < v.size()-1; i++)
{
int diff = abs(v[i]-v[i+1]);
if (diff < best)
best = diff;
}
return best;
}
IntRadixSort 선형 시간 고정 폭 정수 정렬이다 : 여기
은 (리스트가 현재 위치에서 변형 될 수있는 경우도 O (1) 공간을 사용) 이러한 하나의 O (n)이 해결책 알고리즘은 여기서 정의 :
http://en.wikipedia.org/wiki/Radix_sort
개념은 비트 위치에 고정 패스의 일련의를 분할하는 것으로하여 int 치의 고정 비트 너비 특성을 활용할 수 있다는 점이다. 즉, 하이 비트 (32 비트)에서 파티션을 나누고 그 다음으로 높은 비트 (31 비트), 다음 비트 (30 비트) 등을 파티션합니다.
당신은 2 FORS 필요하지 않습니다. 'max'와'min'과'max-min'을 발견하면 최대의 차이를 느낄 것입니다. – kirilloid
배열을 정렬하고 인접한 두 개의 가장 가까운 값을 찾는 것이 더 쉬울까요? – ildjarn
예. 저기있다.그러나 숙제처럼 보이기 때문에 스스로 생각하는 것이 낫습니다. – MajesticRa