美文网首页
竞赛题-6258. 数组中最长的方波

竞赛题-6258. 数组中最长的方波

作者: 程序员小2 | 来源:发表于2022-12-10 11:14 被阅读0次

题目:

给你一个整数数组 nums 。如果 nums 的子序列满足下述条件,则认为该子序列是一个 方波 :

子序列的长度至少为 2 ,并且
将子序列从小到大排序 之后 ,除第一个元素外,每个元素都是前一个元素的 平方 。
返回 nums 中 最长方波 的长度,如果不存在 方波 则返回 -1 。

子序列 也是一个数组,可以由另一个数组删除一些或不删除元素且不改变剩余元素的顺序得到。

示例 1 :

输入:nums = [4,3,6,16,8,2]
输出:3
解释:选出子序列 [4,16,2] 。排序后,得到 [2,4,16] 。

  • 4 = 2 * 2.
  • 16 = 4 * 4.
    因此,[4,16,2] 是一个方波.
    可以证明长度为 4 的子序列都不是方波。
    示例 2 :

输入:nums = [2,3,5,6,7]
输出:-1
解释:nums 不存在方波,所以返回 -1 。

提示:

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

java代码:

class Solution {
    public int longestSquareStreak(int[] nums) {
        Arrays.sort(nums);
        int l = 0;
        int r = nums.length - 1;
        int max = -1;

        Set<Integer> set = new HashSet<Integer>();
        for (int n : nums) {
            set.add(n);
        }
        Set<Integer> visited = new HashSet<Integer>();
        while (l < r) {
            int count = -1;
            int pingfang = nums[l] * nums[l];
            if (pingfang > nums[r]) {
                break;
            }
            visited.add(nums[l]);
            while (set.contains(pingfang)) {
                visited.add(pingfang);
                if (count == -1) {
                    count = 2;
                } else {
                    count++;
                }

                pingfang = pingfang * pingfang;
            }
            l++;
            max = Math.max(max, count);

        }


        return max;
    }
}

相关文章

  • 竞赛题-6258. 数组中最长的方波

    题目: 给你一个整数数组 nums 。如果 nums 的子序列满足下述条件,则认为该子序列是一个 方波 : 子序列...

  • 算法笔记之动态规划

    LEETCODE 718. 最长重复子数组 问题描述:给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长...

  • 数组中的最长山脉

    我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”: B.length >= 3存在 0 < i ...

  • 山峰数组三题

    数组中的最长山脉845. 数组中的最长山脉 解题思路: 就是用动态规划,计算所有元素,左边的元素数量,右边的元素数...

  • leetCode进阶算法题+解析(七十八)

    数组中的最长山脉 题目:我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >=...

  • 397. 最长上升连续子序列

    给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上...

  • LintCode最长上升连续子序列

    给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上...

  • OJ lintcode 最长上升连续子序列

    给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上...

  • 最长上升连续子序列 -dp

    给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上...

  • LeetCode-128-最长连续序列

    最长连续序列 题目描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续...

网友评论

      本文标题:竞赛题-6258. 数组中最长的方波

      本文链接:https://www.haomeiwen.com/subject/zqatqdtx.html