陣列把0移到末尾

2022-08-21 16:39:09 字數 2040 閱讀 3236

給你乙個整型陣列,其中有零和各種非零數字。請寫乙個函式或一段**把非零成員都挪到陣列前部,可以是任意順序,並返回非零成員的數量。

要求:請在原陣列上進行操作,不要另新建陣列副本。

盡可能地減少對陣列的操作次數。

盡可能降低時間複雜度。

請提供一些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會比較這個字串所有的內容,長度都不一樣,肯定不同 把輸入字元長度...