我想在業余時間從我拿到的一本書中學習演算法思維。
我正在考慮場景并嘗試使用偽代碼解決它們以進行學習,但我無法在下面接近這個想法。我正在考慮使用嵌套回圈來執行此操作,但我不知道如何開始。你能幫忙嗎?
如果我們有一個一維陣列,其中提到每個位置應該重復多少次,例如:當 N = 5 時,一維陣列 z = 2,1,1,3,2
基于此,我們應該用每個數字出現的次數填充一個新陣列。因此,基于z我們應該有一個一維陣列A = 1,1,2,3,4,4,4,5,5.
說明:第一個位置z有數字2。因此,在 A 陣列中該數字1應該出現兩次。繼續排列這兩個數z有數量1,因此數量2陣列中A應該只出現一次,因此一個為休息的數字。所以兩個陣列之間存在一個模式。
注意:這不應該使用任何函式或將值轉換為字串并將它們相乘。我對它的理論方面很感興趣,想學習如何思考這些問題。
更新
如果我們有它會有幫助嗎
包含未排序項的陣列:
A: 2,3,1,2,4
和zwhere 計算每個位置被提及的次數。
z: 1,2,1,1
我們可以創建一個新陣列A來根據 的內容對內容進行排序z嗎?
uj5u.com熱心網友回復:
您可以在嵌套回圈中使用串列理解:
result = [i 1 for i, freq in enumerate(z) for _ in range(freq)]
沒有串列理解:
result = []
for i, freq in enumerate(z):
result.extend([i 1]*freq)
沒有任何函式(較少 Pythonic),使用 =和*運算子串列:
result = []
i = 1
for freq in z:
result = [i] * freq
i = 1
沒有*串列的運算子:
result = []
i = 1
for freq in z:
while freq > 0:
result = [i]
freq -= 1
i = 1
= [i]確實是一種笨拙的方法append(i),但至少它避免了您似乎正在尋找的功能。
uj5u.com熱心網友回復:
首先,我們可以嘗試找出我們將獲得的最終陣列大小。最終的陣列大小將是 z 陣列中給定數字的總和。給定 z = [2,1,1,3,2],那么結果陣列的總大小將為 2 1 1 3 2 = 9
所以我們的結果陣列的大小為 9。
現在我們需要將數字 1 重復 2 次。數字 2 重復 1 次,以此類推。所以我們可以首先遍歷給定的陣列 z 并取出每個數字,它告訴我們需要重復多少次。所以使用另一個回圈直到我們達到那個數字,我們可以繼續在結果陣列中添加我們需要的數字。
代碼在 java 中看起來像這樣,也可以在 Python 中使用相同的邏輯:
int [] generateResult(int [] z, int n) {
int sum = 0; // to find the length of result array
for (int i=0; i<n; i ) {
sum = z[i];
}
int [] result = new int [sum];
int indexForResult = 0;
int numberToInsert = 1;
for (int i=0; i<n; i ) {
int repetition = z[i];
// repeat adding the number
for (int j=0; j<repetition; j ) {
result[indexForResult ] = numberToInsert;
}
numberToInsert = 1;
}
return result;
}
uj5u.com熱心網友回復:
使用嵌套回圈可以輕松完成該問題。偽代碼:
INT k -> 0
OUTER LOOP (i->0 TO N-1, WITH INCREMENT OF 1 EACH TIME)
{
INNER LOPP (j->0 TO z[i]-1, WITH INCREMENT OF 1 EACH TIME)
{
A[k] = i 1
k = k 1
}
}
i, j -> Iterators
k -> Maintains Index
N -> Number of Elements in z.
z[i] -> Value at Index i in Array z.
注意:您必須遍歷 z 陣列一次以計算其中元素的總和,這將給出輸出陣列 A 的大小。
z = [2, 1, 3, 4] # Any Input
sum = 0
# Calculating the sum of all elements of z array, so that we can get to know
# number of elemnents of A array.
for i in range (0 , len(z)):
sum = sum z[i]
A = [None]*sum
k = 0
for i in range (0 , len(z)): # Outer loop just runs over to iterate over the z array
for j in range (0 , z[i]): # Inner loop will make sure index i is getting repeated z[i] times
A[k] = i 1
k = k 1
print(A)
如果您使用 append 函式,您也可以完全避免計算總和。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392077.html
上一篇:加權圖的最短路徑,但權重有點特殊
