首页 > 其他分享 >【LeeCode】283. 移动零

【LeeCode】283. 移动零

时间:2022-12-18 19:31:30浏览次数:57  
标签:index nums int System LeeCode toString println 283 移动

【题目描述】

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

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

​https://leetcode.cn/problems/move-zeroes/description/?favorite=2cktkvj&orderBy=most_votes​


【示例】

【LeeCode】283. 移动零_数组


【代码】admin

代码实现了基本要求,但LeeCode输出有问题

import java.util.*;
// 2022-12-17

class Solution {
public void moveZeroes(int[] nums) {
System.out.println("before: " + Arrays.toString(nums));
if (nums.length == 0) return;
int[] res = new int[nums.length];
int index = 0;
for (int i = 0; i < nums.length; i++){
if (nums[i] != 0){
res[index] = nums[i];
index++;
}
}
nums = res;
System.out.println("after: " + Arrays.toString(nums));
}
}

public class Main{
public static void main(String[] args) {
int[] arr = {0,1,0,3,12}; // 输出: 1,3,12,0,0
int[] arr1 = {0}; // 输出: 0
new Solution().moveZeroes(arr);
new Solution().moveZeroes(arr1);

}
}


public void moveZeroes(int[] nums) {
System.out.println("before: " + Arrays.toString(nums));
if (nums.length == 0) return;
// 确保不为0的数字在nums中下标自增
int index = 0;
for (int i = 0; i < nums.length; i++){
if (nums[i] != 0){
int tmp = nums[i];
nums[i] = nums[index];
nums[index] = tmp;
index++;
}
}
System.out.println("after: " + Arrays.toString(nums));
}


【代码】​​Jason365​

解题思路

  • 遍历数组,无为0的元素移动数组前方,用index下标记录。
  • 遍历结束,对index值后的元素统一设为0
public void moveZeroes(int[] nums) {
System.out.println("before: " + Arrays.toString(nums));
int index = 0;
for (int num : nums) {
if (num != 0){
nums[index++] = num;
}
}
while (index < nums.length){
nums[index++] = 0;
}
System.out.println("after: " + Arrays.toString(nums));
}

标签:index,nums,int,System,LeeCode,toString,println,283,移动
From: https://blog.51cto.com/u_13682316/5951019

相关文章

  • 【LeeCode】338. 比特位计数
    【题目描述】给你一个整数 ​​n​​ ,对于 ​​0<=i<=n​​ 中的每个 ​​i​​ ,计算其二进制表示中 ​​1​​​​ 的个数 ,返回一个长度为 ​​​n+1​​......
  • 【LeeCode】697. 数组的度
    【题目描述】给定一个非空且只包含非负数的整数数组 ​​nums​​,数组的 度 的定义是指数组里任一元素出现频数的最大值。你的任务是在 ​​nums​​​ 中找到与 ​​......
  • 【LeeCode】4. 寻找两个正序数组的中位数
    【题目描述】给定两个大小分别为 ​​m​​​ 和 ​​n​​​ 的正序(从小到大)数组 ​​nums1​​​ 和 ​​nums2​​。请你找出并返回这两个正序数组的 中位数 。......
  • 【LeeCode】17. 电话号码的字母组合
    【题目描述】给定一个仅包含数字 ​​2-9​​ 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对......
  • 前端知识学习案例10vs code-向上或者向下移动
     alt+上或者alt+下......
  • 【LeeCode】53. 最大子数组和
    【题目描述】给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。​​​​https://leetcode.......
  • js 实现 移动端 拖拽效果
    点击下面目录标题在线预览效果网页head部分<!--禁止缩放--><metaname="viewport"content="initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/>公......
  • 【LeeCode】2488. 统计中位数为 K 的子数组 -- 太难了
    【题目描述】给你一个长度为n的数组nums,该数组由从1到n的不同整数组成。另给你一个正整数k。统计并返回num中的中位数等于k的非空子数组的数目。注意:数组......
  • WiFi视频遥控履带底盘实现移动
    1.功能描述    本文提供的示例所实现的功能为:用手机APP,通过WiFi通信遥控履带底盘样机实现移动,包括前进、停止、后退、原地左转、原地右转。 2.电子硬件在这......
  • 移动端拖拽事件
    MDNtouch介绍手指在屏幕上的操作rotate旋转:手指在屏幕上旋转pan平移:手指触碰屏幕,移动,最后离开。click(tap)点击:手指在某个位置范围内进行快速点击。swipe快扫:手指在设......