2017-11-10 72 views
-2

我有這樣一個數組:A = [X, 0, X, Y, Y, 0, 0, Y, Z, 0, 0, 0, Z, 0, T, 0, T, 0]。我想寫一個算法,從陣列A中刪除Y,並通過移動ZT(將ZT的位置替換爲0)來替換它們的位置。所以,我會得到如何在某些特定位置將數組的子集移到左側?

  • 原始數組是A = [X, 0, X, Y, Y, 0, 0, Y, Z, 0, 0, 0, Z, 0, T, 0, T, 0]
  • 結果是A = [X, 0, X, Z, Z, 0, 0, T, T, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我試過如下:

  1. 找到指數I={i: A[i] = Y}
  2. 找到索引J={j: A[j] != 0 & j > max(I)}
  3. if size(I)>=size(J) then let i loop through I and j loop through J
  4. 設置A[i]=A[j]並增加ij

我的問題是與案件size(I)<size(J)

下面是另一個例子:

  • 原始陣列是A = [X, Y, Y, Y, Z, 0, T]
  • 結果是A = [X, Z, T, 0, 0, 0, 0]

又如:

  • 原始陣列是A = [X, Y, 0, Y, Z, T]
  • 結果是A = [X, Z, 0, T, 0, 0]
+0

因爲我將兩個'Z'都移到了左邊。 – Ribz

+0

StackOverflow希望您[嘗試首先解決您自己的問題](http://meta.stackoverflow.com/questions/261592),並且我們也[不回答作業問題](https://softwareengineering.meta。 stackexchange.com/questions/6166)。請更新您的問題,以顯示您已經在[最小,完整和可驗證的示例]中嘗試過的內容(http://stackoverflow.com/help/mcve)。有關更多信息,請參閱[如何提出良好問題](http://stackoverflow.com/help/how-to-ask),並參加[網站之旅](http://stackoverflow.com/tour ):) – Barmar

+0

我寫了我所嘗試過的,這不是一個家庭作業問題。也許,python部分就是你所看到的。然後我從這個問題中刪除Python。 – Ribz

回答

1

您應該可以在陣列的單個正向傳遞中執行此操作。

的想法是開始在數組的開頭,並尋找第一Y.從那裏,去看看第一Z.從那裏尋找第一T.

現在你具有Y指數,Z指數和T指數。做你的轉變,將Z移到Y位置,T移到Z位置,並將0放在舊T位置。

然後開始從當前位置移動Y索引以找到下一個Y.找到它時,將Z索引移動到下一個Z,T索引移動到下一個T. Lather,沖洗,重複。

如果你在上一個例子中沒有更多的Z,那麼你使用T索引來找到下一個T並用那個替換Y.

當你用完Y's,那麼你就完成了。所以,如果你有7個Y,只有3個Z和T,這並不重要。當你不能再做更換時,你停下來。

實現有點煩瑣,但上面顯示的一般想法非常簡單。

相關問題