import java.util.*;
class Solution {
public int maximumLength(int[] nums) {
Map<Long, Integer> freq = new HashMap<>();
for (int x : nums) {
freq.put((long) x, freq.getOrDefault((long) x, 0) + 1);
}
int ans = 1;
if (freq.containsKey(1L)) {
int cnt = freq.get(1L);
ans = Math.max(ans, cnt % 2 == 0 ? cnt - 1 : cnt);
}
for (long x : freq.keySet()) {
if (x == 1) continue;
long cur = x;
int len = 0;
while (freq.getOrDefault(cur, 0) >= 2) {
len += 2;
if (cur > 1000000000L / cur) {
break;
}
cur *= cur;
}
if (freq.getOrDefault(cur, 0) == 1) {
len++;
} else {
len--;
}
ans = Math.max(ans, len);
}
return ans;
}
}
TIME COMPLEXITY
SPACE COMPLEXITY