Longest Square Streak in an Array
MediumArrayHash TableBinary SearchDynamic ProgrammingSorting
Solution
Solution1: Sort
export function longestSquareStreak(nums: number[]): number {
nums.sort((a, b) => a - b);
let answer = -1;
const map = new Map<number, number>();
for (const num of nums) {
const root = Math.sqrt(num);
if (Number.isInteger(root) && map.has(root)) {
const rootLength = map.get(root)!;
map.set(num, rootLength + 1);
answer = Math.max(answer, rootLength + 1);
} else {
map.set(num, 1);
}
}
return answer;
}
Complexity
- Time:
- Space:
Solution2: Set
export function longestSquareStreak(nums: number[]): number {
const MAX_NUM = 10 ** 5;
const set = new Set(nums);
let answer = 0;
for (const num of nums) {
let current = num;
let maxLength = 0;
while (set.has(current) && current <= MAX_NUM) {
maxLength += 1;
current *= current;
}
answer = Math.max(answer, maxLength);
}
return answer < 2 ? -1 : answer;
}
Complexity
번의 루프에서 각 요소를 처리하는데 걸리는 시간복잡도는 이기 때문에, 전체 시간 복잡도는 이 된다.
- Time:
- Space: