Back to all solutions

#2501 - Longest Square Streak in an Array

Problem Description

You are given an integer array nums. A subsequence of nums is called a square streak if:

  • The length of the subsequence is at least 2, and
  • after sorting the subsequence, each element (except the first element) is the square of the previous number.

Return the length of the longest square streak in nums, or return -1 if there is no square streak.

A subsequence is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements.

Solution

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestSquareStreak = function(nums) {
  const set = new Set(nums);
  let result = -1;

  for (const num of nums) {
    let current = num;
    let length = 1;

    while (current <= 100000 && set.has(current * current)) {
      current *= current;
      length++;
    }

    if (length >= 2) {
      result = Math.max(result, length);
    }
  }

  return result;
};