亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

打印 x 的最大值,其中 x = |(A[i] – A[j]) + (i – j)|

打印 x 的最大值,其中 x = |(A[i] – A[j]) + (i – j)|

慕標琳琳 2023-03-16 09:43:49
Directi面試中被問到的問題取一個輸入數組,比如 A 并打印 x 的最大值,其中x = |(A[i] – A[j]) + (i – j)|Constraints:Max array size: 20000Time limit: 0.1s時間限制是這個問題的主要因素。這是設置者針對此問題的解決方案。'''THE BRUTE FORCE APPROACHdef 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 sysdef 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        但我嘗試使用解決問題sortdef 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))我的方法正確嗎?優化了嗎?提前致謝。
查看完整描述

2 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

建議的首先排序和獲取元素的答案是不正確的。以反例為例:[2,1,3]

  • 此問題的解決方案應產生 3:(3-1) + (2-1)或 (3-2) + (2-0)

  • 但是,建議的解決方案將產生 4:(3-1) + (2-0)


一個可能的(線性時間)解決方案:

讓我們從一些代數開始,暫時去掉絕對值。

(A[i] – A[j]) + (i – j) = (A[i] + i) - (A[j] + j)

我們正在尋找最大價值,所以

  • 我們想最小化的價值(A[j] + j)

  • 我們想要最大化 的價值(A[i] + i)

  • 請注意,它們彼此完全獨立。

您可以找到兩個整數,一個使 最大化(A[i] + i),另一個使 最小化(A[j] + j)。找到這樣的 2 個數字可以簡單地在線性傳遞中完成。

以相反的方式重復(當(A[i] – A[j]) + (i – j)為負時):

  • 找到最小化的 i(A[i] + i)

  • 很好j,最大化(A[j] + j)。

兩者都在線性時間內完成,產生O(n)解決方案


查看完整回答
反對 回復 2023-03-16
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

排序會擾亂原始數組,并且元素在各自索引處的映射會丟失。所以從邏輯上講,排序會導致錯誤的答案。

例如,正如@amit 在他的評論中正確描述的那樣:

A = [2, 1, 3]

正確答案 = 3

建議的解決方案答案 = 4


查看完整回答
反對 回復 2023-03-16
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號