Python 3:解决代码战中的arrayChange

Python 3:解决代码战中的arrayChange,python,python-3.x,Python,Python 3.x,我目前正在从事arrayChange级别的代码战斗Arcade。这是目标: 您将获得一个整数数组。每走一步你都可以 将其元素中的一个元素正好增加一。查找 从输入中获得严格递增序列所需的移动 范例 对于inputArray=[1,1,1],输出应为 阵列更改(输入阵列)=3 我用Python 3编写了以下代码: def arrayChange(inputArray): original = inputArray[:] count = 0 if len(set(inputArray

我目前正在从事arrayChange级别的代码战斗Arcade。这是目标: 您将获得一个整数数组。每走一步你都可以 将其元素中的一个元素正好增加一。查找
从输入中获得严格递增序列所需的移动

范例

对于
inputArray=[1,1,1]
,输出应为
阵列更改(输入阵列)=3

我用Python 3编写了以下代码:

def arrayChange(inputArray):
   original = inputArray[:]
   count = 0
   if len(set(inputArray)) == 1:
      return ((len(inputArray)-1)**2 + (len(inputArray)-1)) / 2
   elif sorted(inputArray) == inputArray:
      return 0
   for index, value in enumerate(inputArray):
      if index != len(inputArray) - 1 and value > inputArray[index+1]:
         inputArray[index+1] += abs(inputArray[index+1] - value) + 1
      elif index != len(inputArray) - 1 and value == inputArray[index+1]:
         inputArray[index+1] += 1
      elif index == len(inputArray) - 1 and value < inputArray[index-1]:
         inputArray[index] += inputArray[index-1] - value + 1
   print (inputArray)
   for index, value in enumerate(inputArray):
      count = count + abs(value - original[index])
   return count
def阵列更改(输入阵列):
原始=输入阵列[:]
计数=0
如果len(设置(输入阵列))==1:
返回((len(inputArray)-1)**2+(len(inputArray)-1))/2
elif排序(输入阵列)=输入阵列:
返回0
对于索引,枚举中的值(inputArray):
如果索引!=len(inputArray)-1和value>inputArray[索引+1]:
输入阵列[index+1]+=abs(输入阵列[index+1]-值)+1
elif索引!=len(inputArray)-1和value==inputArray[索引+1]:
输入阵列[索引+1]+=1
elif index==len(inputArray)-1和值

它通过了所有非隐藏测试,但未通过第7次隐藏测试。有人能帮我找出我的代码有什么错误吗?提前非常感谢

您没有提到错误,我认为它失败了,因为执行超过了时间限制。代码似乎需要花费时间,尤其是当排序和枚举函数用于大型数组集时。记住测试用例检查所有的边缘用例。一个包括3个≤ 输入数组长度≤ 10^5和-10^5≤ 输入阵列[i]≤ 10^5

这是一个简单的解决方案,它通过了所有案例

def arrayChange(inputArray):
    cnt,temp = 0,0
    while len(inputArray) > 1:
        if inputArray[0] >= inputArray[1]:
            temp = (inputArray[0]-inputArray[1])+1
            inputArray[1]=temp+inputArray[1]
            cnt=cnt+temp
        inputArray.remove(inputArray[0])
    return cnt
问题在于:

elif sorted(inputArray) == inputArray: return 0
以这个数组为例:
[1,1,2]
。是一样的。但是,输出应该是2:
[1,1+1,2+1]
。您应该能够删除该条件以通过所有案例

简单地说:

您的代码可以简化为:

def arrayChange(inputArray):
    sum = 0
    q = inputArray[0]
    for i in inputArray[1:]:
        if i <= q:
            sum += q-i+1
            q = q+1
        else:
            q = i
    return sum
def阵列更改(输入阵列):
总和=0
q=输入阵列[0]
对于输入阵列中的i[1:]:

如果我简明Python解决方案

def arrayChange(inputArray):
    a = 0
    for i in range(1, len(inputArray)):
        if inputArray[i] <= inputArray[i - 1]:
            f = (inputArray[i - 1] - inputArray[i]) + 1
            inputArray[i] = inputArray[i - 1] + 1
            a += f
    return a
def阵列更改(输入阵列):
a=0
对于范围(1,len(输入阵列))中的i:
如果输入阵列[i]
def阵列更改(输入阵列):
移动=0
对于范围(1,len(输入阵列))中的i:

如果输入阵列[i]用于Java的解决方案:

 int arrayChange(int[] inputArray) {
    int numberOfMovesRequired = 0;
    final int length = inputArray.length - 1;
    int i = 0;
    while( i < length){
        if(inputArray[i] >= inputArray[i+1]){
            inputArray[i+1] = inputArray[i+1] + 1;
            numberOfMovesRequired++;
        } else {
            i++;
        }
    }
    return numberOfMovesRequired;
}
int数组更改(int[]输入数组){
int numberOfMovesRequired=0;
最终整数长度=inputArray.length-1;
int i=0;
while(i=输入阵列[i+1]){
输入阵列[i+1]=输入阵列[i+1]+1;
所需移动次数++;
}否则{
i++;
}
}
返回所需的移动次数;
}

通过所有测试用例的Python 3更简单的解决方案

def arrayChange(a):
    count, i = 0, 0
    original = a.copy()

    while i < len(a):
        if i != len(a) - 1 and a[i] >= a[i+1]:
            count += abs(a[i] - a[i+1]) + 1
            a[i+1] += a[i] - a[i+1] + 1
        
        i += 1
    return count
def阵列更改(a):
计数,i=0,0
原件=副本()
而我=a[i+1]:
计数+=abs(a[i]-a[i+1])+1
a[i+1]+=a[i]-a[i+1]+1
i+=1
返回计数

您确定第一条
语句中的返回值正确吗?移动的次数不应该是
n(n-1)/2
,其中n是
len(inputArray)
?@RahulBharadwaj假设n=8。8-1 = 7. 8*7 = 56. 56/2 = 28. 正确的答案应该是36,这是我在代码中使用的语句的结果。哦,我的错,没有扩展公式。我正在对代码进行一些测试。如果有任何帮助,您可以返回计数的
int
。您的公式也返回28,请检查一次。@RahulBharadwaj噢,对不起。对这是双方的回报。我的道歉。所以我们发现这不是问题所在。还有其他建议吗?是的,谢谢。早在很久以前,我就已经明白了这一点,但我忘了回避这个问题。无论如何,谢谢你的时间,我会接受你的回答,这样你就不会浪费你的时间了。哦,很抱歉,我把帖子给删了。我也是一名密码战士我能让你的ign加上你吗?谢谢:)没问题:)很高兴知道你也是一名代码斗士。我刚加入两三个月左右。我的ign是假的再次谢谢你伙计
def arrayChange(a):
    count, i = 0, 0
    original = a.copy()

    while i < len(a):
        if i != len(a) - 1 and a[i] >= a[i+1]:
            count += abs(a[i] - a[i+1]) + 1
            a[i+1] += a[i] - a[i+1] + 1
        
        i += 1
    return count