<p><em>️直接面试中提出的问题</em></p>
<p>取一个输入数组,比如A,然后打印x的最大值
其中<code>x = |(A[i] – A[j]) + (i – j)|</code></p>
<pre><code>Constraints:
Max array size: 20000
Time limit: 0.1s
</code></pre>
<p>时间限制是这个问题的一个主要因素</p>
<p>这是这个问题的设定者的解决方案</p>
<pre><code>
'''
THE BRUTE FORCE APPROACH
def maximum(arr):
res=0
n=len(arr)
for i in range (n):
for j in range(n):
res=max(res,abs(arr[i]-arr[j])+abs(i-j))
return res
'''
import sys
def maximum(arr):
max1=max2=-sys.maxsize-1
min1=min2=sys.maxsize
ans=0
n=len(arr)
for i in range(n):
max1=max(max1,arr[i]+i)
max2=max(max2,arr[i]-i)
min1=min(min1,arr[i]+i)
min2=min(min2,arr[i]-i)
ans=max(ans,max2-min2)
ans=max(ans,max1-min1)
return ans
</code></pre>
<p>但是我试着用<code>sort</code>解决这个问题</p>
<pre><code>def maximum(array):
n=len(array)
array.sort()
return (array[n-1]-array[0]) + (n-1)
if __name__=="__main__":
n=int(input())
array= list(map(int,input("\nEnter the numbers : ").strip().split()))[:n]
print(maximum(array))
</code></pre>
<p>我的方法正确吗?它优化了吗?
提前谢谢</p>