当前位置:   article > 正文

【Leetcode】283. 移动零(Java版)_leetcode 283. 移动零 java

leetcode 283. 移动零 java

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

  1. 输入: nums = [0,1,0,3,12]
  2. 输出: [1,3,12,0,0]

示例 2:

  1. 输入: nums = [0]
  2. 输出: [0]

提示:

  • 1 <= nums.length <= 104

  • -231 <= nums[i] <= 231 - 1

进阶:你能尽量减少完成的操作次数吗?

带测试版

  1. /**
  2. * @description:
  3. * @author: r1ng
  4. * @time: 2023/7/31 17:26
  5. */
  6. public class moveZeroes {
  7. public static void moveZeroes(int[] nums) {
  8. //考虑特殊情况
  9. if(nums == null) return;
  10. //定义两个数组下标i,j
  11. for(int i = 0,j =0; i < nums.length;i++){
  12. if(nums[i] != 0){
  13. int temp = nums[i];
  14. nums[i] = nums[j];
  15. nums[j++] = temp;
  16. }
  17. }
  18. }
  19. public static void main(String[] args) {
  20. int[] nums = {1,4,0,4,3,8,0,5,3};
  21. moveZeroes(nums);
  22. for (int num:nums) {
  23. System.out.print(num);
  24. }
  25. }
  26. }

 不带测试版本

  1. class Solution {
  2. public void moveZeroes(int[] nums) {
  3. //考虑特殊情况
  4. if(nums == null) return;
  5. //定义两个数组下标i,j
  6. for(int i = 0,j =0; i < nums.length;i++){
  7. if(nums[i] != 0){
  8. int temp = nums[i];
  9. nums[i] = nums[j];
  10. nums[j++] = temp;
  11. }
  12. }
  13. }
  14. }

b这里我们可以用 0 当做这个中间点,把不等于 0(注意题目没说不能有负数)的放到中间点的左边,等于 0 的放到其右边。 这的中间点就是 0 本身,所以实现起来比快速排序简单很多,我们使用两个指针 i 和 j,只要 nums[i]!=0,我们就交换 nums[i] 和 nums[j++]

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/385461
推荐阅读
相关标签
  

闽ICP备14008679号