Leetcode 283. Move Zeroes 移动数组中的零 (数组,模拟)
2018-02-06 18:57
441 查看
题目描述
已知数组nums,写一个函数将
nums中的
0移动到数组后面,同时保持非零元素的相对位置不变。比如已知
nums=[0,1,0,3,12],调用你写的函数后
nums应该是
[1,3,12,0,0]
提醒:
你必须就地进行操作,不能生成数组的复制
使操作次数最少
测试样例
Input:num=[0,1,0,3,12] Output:num=[1,3,12,0,0] Input:nums=[1,0,3,0,5,7] Output:nums=[1,3,5,7,0,0]
详细分析
从左至右遍历数组,当发现零元素后,找到它后面第一个非零元素,两者交换即可 执行效果如下:nums=[0,1,0,12]
nums=[1,0,0,12]
nums=[1,12,0,0]
代码实现
java实现class Solution { public void moveZeroes(int[] nums) { List<Integer> nozero = new ArrayList<>(); for(int i=0;i<nums.length;i++){ if(nums[i]!=0){ nozero.add(nums[i]); } } int cnt = 0; for(int x:nozero){ nums[cnt++] = x; } for(int s=cnt;s<nums.length;s++){ nums[s]=0; } } }
c实现
void moveZeroes(int* nums, int numsSize) { for(int i=0;i<numsSize;i++){ if(nums[i]!=0){ int cnt = 0; while(cnt<i&&nums[cnt]!=0){ cnt++; } if(cnt<i){ nums[cnt] = nums[i]; nums[i] = 0; } } } }
相关文章推荐
- Leetcode 283. Move Zeroes 移动数组中的零 (数组,模拟)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- Leetcode 121. Best Time to Buy and Sell Stock 最佳股票售卖时(动态规划,数组,模拟)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- 九度OJ 1398 移动次数 (数组,模拟)
- 紫书章六例题五 移动盒子 UVA 12657 (数组模拟双向链表)
- 6-2-2 移动的小球(数组模拟链表实现)
- [LeetCode]5. Move Zeros移动0到数组末尾
- 每天一道LeetCode-----将数组/链表后k个元素移动到前面
- LeetCode 45 Jump Game II(按照数组进行移动)
- Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
- Leetcode 566. Reshape the Matrix 矩阵变形(数组,模拟,矩阵操作)
- leetcode 209. Minimum Size Subarray Sum 最短子数组的和 + 十分典型的移动窗口做法
- Sicily 1934.移动小球 | 数组模拟
- LeetCode283——Move Zeroes(将0移动到数组最后面)
- LeetCode 分类练习(1)—— 在数组中移动指定元素、删除指定元素、删除重复元素
- leetcode 713. Subarray Product Less Than K 连续子数组之积小于K + 移动窗口