給你乙個整型陣列,其中有零和各種非零數字。請寫乙個函式或一段**把非零成員都挪到陣列前部,可以是任意順序,並返回非零成員的數量。
要求:請在原陣列上進行操作,不要另新建陣列副本。
盡可能地減少對陣列的操作次數。
盡可能降低時間複雜度。
請提供一些test cases(測試用例)來測試你的**。
例:[1, 0, 2, 0, 0, 3, 4, 0, 5]
經該函式呼叫後,返回值應為5,因為有5個非零成員。
陣列經處理後可以接收的結果如 [4, 3, 1, 2, 5, 0, 0, 0, 0],[1, 2, 3, 4, 5, 0, 0, 0, 0] 或者 [2, 3, 5, 1, 4, 0, 0, 0, 0]等。所有非零成員被挪到了陣列前部,對它們的順序沒有要求。
測試用例:
[1, 0, 2, 0, 0, 3, 4, 0, 5]
[1, 0, 2, 0, 0, 3, 4, 0, 5, 2]
[1, 0, 2, 0, 0, 3, 4, 0, 5,0]
[0, 1, 0, 2, 0, 0, 3, 4, 0, 5]
[0, 0, 1, 0, 2, 0, 0, 3, 4, 0, 5, 6]
[0, 1, 0, 2, 0, 0, 3, 4, 0, 5, 0]
[0, 1, 0, 2, 0, 0, 3, 4, 0, 5, 0, 0]
[0, 3, 6, 3, 2, 5, 1, 0, 2]
時間複雜度最好為n/2, 最壞為n,取為o(n)。
def test(arr):
i, j, z_count = 0, len(arr) - 1, 0
while i <= j:
if arr[i] != 0:
i += 1
else:
while i <= j:
if arr[j] == 0:
z_count += 1
j -= 1
else:
arr[i] = arr[j]
arr[j] = 0
i += 1
break
return arr, z_count
if __name__ == '__main__':
test_arr = [1, 0, 2, 0, 0, 3, 4, 0, 5, 0]
res, zero_count = test(test_arr)
print(res)
print(zero_count)
# input: [1, 0, 2, 0, 0, 3, 4, 0, 5]
# out: [1, 1, 2, 5, 3, 4, 0, 0, 0, 0, 0]
## input: [1, 0, 2, 0, 0, 3, 4, 0, 5, 2]
# out: [1, 2, 2, 5, 4, 3, 0, 0, 0, 0]
## input: [1, 0, 2, 0, 0, 3, 4, 0, 5, 0]
# out: [1, 5, 2, 4, 3, 0, 0, 0, 0, 0]
## input: [0,1, 0, 2, 0, 0, 3, 4, 0, 5]
# out: [5, 1, 4, 2, 3, 0, 0, 0, 0, 0]
## input: [0, 0, 1, 0, 2, 0, 0, 3, 4, 0, 5, 6]
# out: [6, 5, 1, 4, 2, 3, 0, 0, 0, 0, 0, 0]
## input: [0, 1, 0, 2, 0, 0, 3, 4, 0, 5, 0]
# out: [5, 1, 4, 2, 3, 0, 0, 0, 0, 0, 0]
## input: [0, 1, 0, 2, 0, 0, 3, 4, 0, 5, 0, 0]
# out: [5, 1, 4, 2, 3, 0, 0, 0, 0, 0, 0, 0]
## input: [0, 3, 6, 3, 2, 5, 1, 0, 2]
# out: [2, 3, 6, 3, 2, 5, 1, 0, 0]
解決把陣列中的0移到陣列末尾,其他元素相對位置不變
問題 給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。示例 輸入 0,1,0,3,12 輸出 1,3,12,0,0 要求 解決思路 使用雙指標,左指標指向當前已經處理好的序列的尾部,右指標指向待處理序列的頭部。右指標不斷向右移動,每次右指標指向非零數,則...
n!末尾0的個數
肯定不能直接求出 n 然後在計算後邊有多少個0 因為 1000000 的位數就是 5565709 對於 n!的末尾如果有乙個 0 的話,必然有乙個 5 與其對應著 所以就是找從 1 到 n 這些數的約數 因子 中有多少個 5 它們有幾個 5,n 末尾就有幾個0 令f x 表示正整數x末尾所含有的 0...
對fgets末尾 0 的處理
之所以要對fgets自動新增的字元進行處理的原因之一是 當你想比較輸入的字元時,你會發現輸入的字元和原始碼用來進行對比的字元一模一樣,但是使用strcmp比較時就是不一樣,原因就是fgets對輸入字元新增了乙個字 符造成的 strcmp會比較這個字串所有的內容,長度都不一樣,肯定不同 把輸入字元長度...