文章目錄
- 問題描述:
- 解題思路:
- 代碼實作:
問題描述:
給定一個陣列 nums,撰寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序,
示例:
輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]
說明:
必須在原陣列上操作,不能拷貝額外的陣列,
盡量減少操作次數,
解題思路:
??解法一:使用冒泡排序的方法將所有0移動到后面,
&emps;?解法二:遍歷兩次陣列,第一次先將所有的非零數移動到前面,即先前靠攏;第二次遍歷將陣列末尾多余出來的位置賦值為零,
代碼實作:
/**
* 冒泡排序解法
* @param nums
*/
public static void moveZeroes(int[] nums) {
int j = nums.length - 2;
//從后向前遍歷,尋找0
while(j>=0){
if(nums[j]==0){
//找到零后使用類似于冒泡排序的方法將零移動到最后、
int i=j;
//注意 i<nums.length-2 要放在前面,防止陣列越界
while (i<=nums.length-2 && nums[i+1] != 0) {
int t = nums[i];
nums[i] = nums[i+1];
nums[i+1] = t;
i++;
}
}
j--;
}
}
/**
* 兩次遍歷的解法
* @param nums
*/
public static void moveZeroes2(int[] nums) {
int j = 0; //用于記錄非零結尾位置,即臨界值
//第一次遍歷將所有的非零值都移動到前面
for(int i=0; i<nums.length; i++){
if(nums[i] !=0 ){
nums[j] = nums[i];
j++;
}
}
//第二次遍歷將將末尾多出的位置都賦值為零
for(int i=j; i<nums.length; i++){
nums[i] = 0;
}
}
冒泡排序解法的提交結果:

兩次遍歷解法的提交結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/259250.html
標籤:其他
上一篇:CSS學習(未成稿)
