删除数组中为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