Implement a TwoSum interface that has 2 methods: Store and Test. Store adds an integer to an internal data store and Test checks if an integer passed to Test is the sum of any two integers in the internal data store.
는 다양한 저장 및 테스트 복잡성 많은 답변을 것 같다. 유망한 것이 하나 있습니다
StoreDict라는 Hashtable이 있습니다. 나는. StoreDict[@(N)]
가 있으면 NSMutableDictionary <NSNumber *, NSNumber *> *StoreDict
내부 데이터 구조로
Store(N)
는- 검사로서 구현된다. 예, 증가 수, 즉이 경우
StoreDict[@(N)] = @([StoreDict[@(N)] intValue]++)
- 검사로서 구현된다. 예, 증가 수, 즉이 경우
Test(N)
모든 키를 통해반복 처리로 구현. 각 키, K, 들어
StoreDict[@(N-[K intValue])]
이하면
[K intValue] == N/2
체크하면[StoreDict[@(K)] intValue] >= 2
있는 경우 [K intValue] != N/2
검사가 store
처럼 보이는 경우
O(N)
실행 시간 복잡성. 유일한 문제는 모든 키를 반복하는 공간의 복잡성은 무엇입니까?
O(1)
또는
O(N)
입니까? 즉, 하나씩 (o (1) 공간) 주어진 키 또는 모든 임시 배열 (o (N) 공간)에있는 N입니까? 나는 그것이
O(N)
공간의 복잡성,이를 위해
O(1)
시간과 공간 복잡도를 얻을 수있는 더 나은 솔루션의 경우 키
NSEnumerator *enumerator = [StoreDict keyEnumerator];
id key;
while ((key = [enumerator nextObject])) {
/* code that uses the returned key */
}
를 얻기 위해 다음 코드를 사용하여 참조하고
편집
문제?
이거나 [StoreDict allKeys]
과 유사한 keyEnumerator
인데, 이는 O (N) 공간 복잡도입니까?
N이란 무엇입니까?모든 키를 반복하는 것은 적어도 정수의 개수가 O (N) 이상이어야합니다 (중복이 적음). – Max
@Max 위의 편집을 참조하십시오. 위의 코드를 편집에 사용하여 키를 얻으면 키를 하나 하나 가져 와서 추가 공간을 'O (1)'로 만들거나'[myDict allKeys]'를 가져와 배열 하나를 걷는 것과 같이 동작하게 할 것입니다 O (N) 추가 공간 인 하나씩? –
@Max 한 오타를 수정했습니다. 예, Test()는 O (N) 런타임 복잡성입니다. 내 Q는 공간 복잡성에 있습니다. –