Python 3:解决代码战中的arrayChange
我目前正在从事arrayChange级别的代码战斗Arcade。这是目标: 您将获得一个整数数组。每走一步你都可以 将其元素中的一个元素正好增加一。查找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
从输入中获得严格递增序列所需的移动 范例 对于
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