【重构数组,形成排列的最大长度】

题目描述

对一个长度为n的数组,某个数加一的同时对另一个数减一,任意次操作后数组最长的排序子序列的长度是多少?

新数组的元素不能为0

思路

数组的元素和是固定的,suma

将列表和suma 重新分配给lenth = n 的列表,求能组成的排列(1,2,3,4,5,...,k,...)的最大长度k

因为新数组的元素不能为0,预先给每个位置留下1

相当于放豆子游戏,n个位置,一共有suma颗豆子,每个位置先放一个豆子,剩下的位置,下标为i的地方放i个豆子,如果下标为i的地方不够i个豆子了,说明最大的排列就到i

如果每个位置都放完了,还有剩下豆子,那这部分剩下的就需要都放在最后一个位置,前面n-1个可以构成排列。

代码

python 复制代码
# 将列表和suma 重新分配给lenth = n 的列表,求能组成的排列(1,2,3,4,5,...,k,...)的最大长度k

def ans(arr):
    suma = sum(arr)
    n = len(arr)
    suma -= n
    for i in range(1, n):
        if suma < i :
            return i
        suma -= i
    if suma == 0:
        return n    
    return n-1


print(ans([2]))
相关推荐
晚风予卿云月13 小时前
【前缀和】一维前缀和 & 二维前缀和
数据结构·c++·算法
林文韬32713 小时前
逐位二进制拼接 → 翻转 → 去头零 → 消邻重
算法
变量未定义~13 小时前
单点修改、区间求和(模板)、区间修改,单点查询(模板)
数据结构·算法
weixin_4684668513 小时前
SURF 图像特征提取算法新手实战指南
图像处理·人工智能·算法·机器视觉·surf·sift
weixin_4684668514 小时前
支持向量机新手实战指南
人工智能·python·算法·机器学习·支持向量机
weixin_4684668515 小时前
机器学习之决策树新手实战指南
人工智能·python·算法·决策树·机器学习·ai
wanghu202415 小时前
ABC460_E题题解
c++·算法
z2005093015 小时前
今日算法(回溯子集)
数据结构·算法·leetcode
Hesionberger15 小时前
巧用异或找出唯一数字(多解)
java·数据结构·python·算法·leetcode
变量未定义~15 小时前
阶乘的约数和、斐波那契数列、数列区间最大值(ST表)
数据结构·算法