面試題5 最大下標距離

2021-08-19 17:48:22 字數 1162 閱讀 7495

題目:給定乙個整型陣列a,找出最大下標距離j-i,當且僅當 a[i]書中給出的思路:

思路一:常規我們最直觀想到的解決方法是

(1)i=0,j=end(end為最後下標所在位置),max=0

(2)如果a[i]max,則max=j-i

(3)i++,j=end

(4)重複第

二、第三步驟,直到i==j

這種演算法的時間複雜度是 1+2+...+n-1 = (n-1)*(n-2)/2 = o(n^2)

思路二:通過觀察,我們可以得到這樣乙個規律,在遞減序列中,遞減系列最小(下標i1),如存在乙個i2,使得i1j-i2,先理解這上面一段

假設:這個整型陣列

演算法核心思路:

(1)找出下降序列(這邊找到的是5,3,0。為什麼不可以是5,4,0呢?這邊值3的下標是1,值4的下標是2,用反證法,在這個下降序列後面存在乙個值大於4的值下標為j,則一定滿足j-1>j-2,看到書上實現找出下降序列的**非常好)

(2)i=值最小的下標位置,j=最末尾的下標位置

(3)j--,如果滿足a[i]若出現i>=j,則跳到第五步驟

(4)i--,如果滿足i為下降序列中的一員,i>=0,則判斷a[i]和a[j]大小,

如果a[i]如果a[i]>a[j],i--已經沒有意義了(因為比當前i更小的下降序列對應的值肯定是大於a[j]),此時要跳完第三步驟

若出現i<0,則跳到第五步驟

(5)此時的max即為最大下標距離

func maxindexdistance(a int) int 

indescseq, min, n := make(bool, 0), a[0], len(a)

// 步驟一

for i := 0;i < n;i += 1

} // 步驟二

maxdist, i, j := 0, n - 1, n - 1

for i >= 0

// 第四步驟

for a[i] >= a[j] && j > i

if (j - i) > maxdist

i--} // 第五步驟

return maxdist

}

以上總共做了三次線性掃瞄,每次掃瞄的時間複雜度為o(n),因此,整個演算法的時間複雜度為o(n)

5個面試題

面試者1 1 寫乙個int型的stack類 2 兩個有序鍊錶merge成乙個鍊錶 3 判斷兩個字串是否相等。abc,bac,return true 面試者2 每輪一道,第一輪英文自我介紹加演算法,第二輪時間比較短就演算法,第三輪是專案介紹加演算法 面試者3 寫乙個函式,逆序乙個陣列 寫乙個函式,將整...

演算法之求最大下標距離

出處 題幹 輸入 任意整型陣列a 求滿足約束條件a i 數學上是個最優化問題,暴力求法就不說了,n平方時間複雜度的大家都會。這裡給思路上的9個直覺,直覺是讓你記住演算法的終極 比 重要,掌握了直覺,才算是真正理解。源 用python寫的,放這裡了 其中的question1.py就是.個人感覺比較重要...

iOS面試題5 答案

1 寫乙個遞迴方法 計算n的階乘,然後將計算結果進行儲存。以便應用退出後下次啟動課直接獲取該值。double fun int n if n 0 n 1 return 1 else return n fun n 1 2 nsarray和nsmutablearray的區別,多執行緒操作哪個更安全?nsa...