honghai83@
Senior Member
C#:
public int LongestSquareStreak(int[] nums) {
Queue<Tuple<int, int>> queue = new Queue<Tuple<int, int>>();
Array.Sort(nums);
int maxStreak = 0;
foreach (int element in nums)
{
while (queue.Count != 0 && queue.Peek().Item1 <= element)
{
if (queue.Peek().Item1 == element)
{
Tuple<int, int> tmp = queue.Dequeue();
if (maxStreak <= tmp.Item2) maxStreak = tmp.Item2 + 1;
queue.Enqueue(new Tuple<int, int> (element * element, tmp.Item2 + 1));
break;
}
queue.Dequeue();
}
queue.Enqueue(new Tuple<int, int> (element * element, 1));
}
return maxStreak >= 2 ? maxStreak : -1;
}
refactor lại đi bác 

