2024-10-28 Daily Challenge

Today I have done leetcode's October LeetCoding Challenge with cpp.

October LeetCoding Challenge 28

Description

Longest Square Streak in an Array

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.

 

Example 1:

Input: nums = [4,3,6,16,8,2]
Output: 3
Explanation: Choose the subsequence [4,16,2]. After sorting it, it becomes [2,4,16].
- 4 = 2 * 2.
- 16 = 4 * 4.
Therefore, [4,16,2] is a square streak.
It can be shown that every subsequence of length 4 is not a square streak.

Example 2:

Input: nums = [2,3,5,6,7]
Output: -1
Explanation: There is no square streak in nums so return -1.

 

Constraints:

  • 2 <= nums.length <= 105
  • 2 <= nums[i] <= 105

Solution

class Solution {
public:
  int longestSquareStreak(vector<int>& nums) {
    set<int> count;
    for(auto n : nums) {
      count.insert(n);
    }
    set<int> visited;
    int answer = -1;
    for(auto n : count) {
      int current = 1;
      while(INT_MAX / n >= n && count.count(n * n)) {
        n *= n;
        current += 1;
      }
      if(current > 1) answer = max(current, answer);
    }
    return answer;
  }
};