刪除數組中為0元素


題目描述:

給定一個一維數組,將其中為0的元素刪除掉,非零元素的相對位置保持不變,最終目標數組保留在原數組中,並且目標數組長度之外的元素全部置為0。

 

解題思路:

(1)數組非零元素往前移動,時間復雜度O(n)。

思路:先將非0的元素往前靠,最后再將剩下的位置重置為0。

 1 public void moveZeroes(int[] nums) {
 2         if(nums.length < 1)
 3             return ;
 4         int Index = 0;
 5         for (int i=0; i<nums.length; i++){
 6             if(0 != nums[i]){
 7                 nums[Index++] = nums[i];
 8             }
 9         }
10         for(int i=Index; i<nums.length; i++){
11             nums[i] = 0;
12         }
13  
14     }

利用兩個指針,交換位置。時間復雜度O(n)。

思路:可以用兩個指針,第一個指針永遠指向從左往右為0的元素,第二個指針為遍歷指針,當遍歷指針指向的值為非0的時候,將這個元素與第一個指針指向的元素交換。

 1 public void moveZeroes(int[] nums) {
 2         //first指針永遠指向當前為0的元素
 3         int first = 0;
 4  
 5         for (int second = 0; second < nums.length; second++) {
 6             //為0的和非0的交換
 7             if (nums[second] != 0) {
 8                 int temp = nums[first];
 9                 nums[first] = nums[second];
10                 nums[second] = temp;
11                 first++;
12             }
13         }
14     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM