java數(shù)據(jù)結(jié)構(gòu)與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進(jìn)不去說(shuō)明我沒(méi)寫完):https://blog.csdn.net/grd_java/article/details/123063846 |
---|
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-813082.html
解題思路 |
---|
- 雙指針,用right和left兩個(gè)指針,將非0元素,全部按順序換到數(shù)組前面。left指向左邊非0元素應(yīng)該插入的位置,right找到非0元素,將其和left位置元素交換。但是如果left和right指向同一個(gè)元素,交換與不交換的結(jié)果是一樣的。
![]()
代碼:時(shí)間復(fù)雜度O(n).空間復(fù)雜度O(1) |
---|
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-813082.html
class Solution {
public void moveZeroes(int[] nums) {
int left = 0,right = 0;//左右指針
while(right<nums.length){//右指針只要不越界,就繼續(xù)判斷
if(nums[right]!=0){//如果找到右邊的一個(gè)非0元素,就交換和left所指元素的位置
if(left != right){//兩個(gè)指針如果指向同一個(gè)元素,就沒(méi)必要交換。
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
left++;//此時(shí)left指向下一個(gè)非0元素應(yīng)該插入的位置
}
right++;//right向下繼續(xù)判斷
}
}
}
到了這里,關(guān)于java數(shù)據(jù)結(jié)構(gòu)與算法刷題-----LeetCode283. 移動(dòng)零的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!