128最长连续序列

import java.util.Arrays;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int longestConsecutive(int[] nums) {
        int len = nums.length;
        Arrays.sort(nums);
        int index = 0;
        int tempLen = 1;
        int ret = len == 0 ? 0 : 1;		// 特殊情况,数组长度为0,或1;
        for (int i = 0; i < len - 1; i++) {
            index = nums[i];

            // 越过重复元素
            if (index == nums[i + 1]) {
                continue;
            }
            if (index + 1 == nums[i + 1]) {
                tempLen++;

                // 取连续最大值
                if (tempLen > ret) {
                    ret = tempLen;
                }
            } else {
                tempLen = 1;
            }
        }
        return ret;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是最连续序列的问题描述和解决思路: 【问题描述】 给定一个整数序列,找出其中最连续序列(至少包含2个元素),使得所有子序列元素之和相等,并返回该子序列度。 【解决思路】 这是一道典型的动态规划问题,我们可以用动态规划来解决。 我们可以先计算出整个序列的元素之和sum,然后设dp[i]表示以第i个元素结尾的最连续序列度。如果前i个元素的元素之和为sum,则前i个元素的最连续序列度为i,因为前i个元素中任意一个度为i的子序列的元素之和都等于sum。如果前i个元素的元素之和不为sum,则可以在前i-1个元素中找到一个最连续序列,使得该子序列的元素之和等于sum - nums[i],然后将第i个元素加入该子序列中,得到以第i个元素结尾的最连续序列。 因此,状态转移方程为: ``` dp[i] = i if sum(nums[:i+1]) == sum max(dp[j]+i-j if sum(nums[j:i+1]) == sum - nums[i] else 0 for j in range(i)) ``` 其中,sum(nums[:i+1])表示前i+1个元素的元素之和,sum - nums[i]表示前i个元素中除去第i个元素的元素之和。 最终,最连续序列度等于dp中的最大值。 【Python代码实现】 下面是一个简单的Python函数,用于计算最连续序列度: ```python def longest_continuous_subsequence(nums): """ 计算最连续序列度 """ if not nums: return 0 sum = 0 for num in nums: sum += num dp = [0] * len(nums) for i in range(len(nums)): if sum(nums[:i+1]) == sum: dp[i] = i else: dp[i] = max(dp[j]+i-j if sum(nums[j:i+1]) == sum - nums[i] else 0 for j in range(i)) return max(dp) ``` 注意,这里使用了Python内置的sum函数,用于计算序列中所有元素的和。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值