国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

Java雙指針?biāo)惴▋?yōu)化數(shù)組中0元素移動(dòng)

問題描述給定一個(gè)數(shù)組nums,編寫一個(gè)函數(shù)將所有0移動(dòng)到數(shù)組的末尾,同時(shí)保持非零元素的相對(duì)順序。要求時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。 解決方案通過雙指針?biāo)惴梢栽跐M足約束條件下解決這一問

問題描述

給定一個(gè)數(shù)組nums,編寫一個(gè)函數(shù)將所有0移動(dòng)到數(shù)組的末尾,同時(shí)保持非零元素的相對(duì)順序。要求時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。

解決方案

通過雙指針?biāo)惴梢栽跐M足約束條件下解決這一問題。算法原理如下:聲明快慢兩個(gè)數(shù)組索引指針,同時(shí)向前移動(dòng)。如果當(dāng)前元素等于0,則慢索引停止(指向第一個(gè)為0的元素),快索引不停;如果當(dāng)前元素不等于0,則和慢索引元素交換,慢索引向前移動(dòng)1位即可。

編寫代碼

```java

public void moveZeroes(int[] nums) {

if (nums null || nums.length 0) {

return;

}

int slow 0;

for (int fast 0; fast < nums.length; fast ) {

if (nums[fast] ! 0) {

int temp nums[slow];

nums[slow] nums[fast];

nums[fast] temp;

slow ;

}

}

}

```

測試與提交

編寫完算法后,可以編寫測試代碼并運(yùn)行,觀察控制臺(tái)輸出,驗(yàn)證算法是否符合預(yù)期。在本地測試通過后,可以將算法提交到相應(yīng)平臺(tái)進(jìn)行測試。

算法復(fù)雜度分析

該算法只需遍歷兩遍數(shù)組,因此時(shí)間復(fù)雜度為O(n),其中n為數(shù)組長度。由于沒有借助其他數(shù)據(jù)結(jié)構(gòu)進(jìn)行輔助操作,空間復(fù)雜度為O(1)。

通過以上優(yōu)化的雙指針?biāo)惴?,可以高效地將?shù)組中的0元素移動(dòng)到末尾并保持非零元素的相對(duì)順序。在實(shí)際應(yīng)用中,這種算法能夠提升程序的執(zhí)行效率,特別是對(duì)于處理大規(guī)模數(shù)據(jù)時(shí)具有顯著的優(yōu)勢。

標(biāo)簽: