LeetCode 283. 移动零(C#实现)——数组

一、问题

https://leetcode-cn.com/problems/move-zeroes/

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

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

    必须在原数组上操作,不能拷贝额外的数组。
    尽量减少操作次数。

二、GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/MoveZeroesClass.cs‘’

  Blog:https://www.cnblogs.com/zxxxx/

三、思路

  index标识非零的个数,循环遍历数组;如果不是0,就将非零的值移到index位,index加一;遍历结束后,再次遍历,index后的位置都为0

  优化思路:不需要第二次遍历,第一次遍历数组时判断下标是否等于index,不等于就将当前值置为零

四、代码实现

    public class MoveZeroesClass
    {
        public void MoveZeroes(int[] nums)
        {
            if (nums == null || nums.Length == 0) return;
            //非零个数
            var count = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                //非零值移到当前指针位置
                if (nums[i] != 0)
                {
                    nums[count] = nums[i];
                    count++;
                }
            }
            //当前指针位置后都为0
            for (int i = count; i < nums.Length; i++)
            {
                nums[i] = 0;
            }
        }

        public void MoveZeroes2(int[] nums)
        {
            if (nums == null || nums.Length == 0) return;
            var current = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] != 0)
                {
                    nums[current] = nums[i];
                    //num[i]值置0
                    if (current != i)
                    {
                        nums[i] = 0;
                    }
                    current++;
                }
            }
        }
    }

原文地址:https://www.cnblogs.com/zxxxx/p/12206304.html

时间: 2024-10-16 13:21:54

LeetCode 283. 移动零(C#实现)——数组的相关文章

前端与算法 leetcode 283. 移动零

[TOC] 前端与算法 leetcode 283. 移动零 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组. 尽量减少操作次数. 283. 移动零 概要 这个问题属于 "数组变换" 的一个广泛范畴.这一类是技术面试的重点.主要是因为数组是如此简单和易于使用的数据结构.遍历或表示不需要任何样板代码,而且大多数

leetcode 283. 移动零

题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组. 尽量减少操作次数. 思路分析: 之前刷题的思路通常都是看到简单题直接略过,后来发现其实很多简单题的一步步进阶解法才是在面试中更容易遇到的.首先去思考一个最直接粗暴的解法,再一步一步从空间和时间上做优化.比如这道题: 思路1. 由于必须在原数组上操作,最直接直观的解法

leetcode 283. 移动零(双指针)

来源:力扣 链接:https://leetcode-cn.com/problems/move-zeroes/ 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组. 尽量减少操作次数 解:这个题的本质就是c语言中的unqiue函数,有序数组去重 class Solution { public: void moveZeroes(vec

Leetcode 283.移动零 By Python

思路 我们可以用python的list comprehension来取出所以非0的元素,而且这样取出来会保持原有的相对顺序,再统计先后变化的长度,补上相应的0即可 代码 class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. "&quo

283. 移动零

地址:https://leetcode-cn.com/problems/move-zeroes/ <?php /** * Class Solution * 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] */ class Solution { /** * @param Integer[] $nums * @return NULL */ function m

leetCode 119. Pascal&#39;s Triangle II 数组

119. Pascal's Triangle II Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to use only O(k) extra space? 代码如下:(使用双数组处理,未优化版) class Solution { public:     

Effective Java 之-----返回零长度的数组或集合而不是null

如下代码,通常用户列表为空时,会习惯性返回null,因为这时会认为:null返回值比零长度数组更好,因为它避免了分配数组所需要的开销. private final List<UserBean> UserList = null; public List<UserBean> getUserBean(){ if(UserList.size() == 0){ return null; }else{ return UserList; } } 但这种观点是站不住脚的,原因如下: 1) 在这个级

返回零长度的数组或者集合,而不是null——Effective Java 读书笔记

/** * 返回零长度的数组或者集合,而不是null * * @author 刘向峰 * */ public class Shop { private List<Object> objectList; // 零长度数组常量被传递给toArray方法,以指明所期望的返回类型 private final static Object[] EMPTY_OBJECT_ARRAY = new Object[0]; public Shop(List<Object> objectList) { s

返回零长度的数组或者集合,而不是null

<<Effective Java>> 第四十三条:返回零长度的数组或者集合,而不是null 如果一个方法的返回值类型是集合或者数组 ,如果在方法内部需要返回的集合或者数组是零长度的,也就是没有实际对象在里面, 我们也应该放回一个零长度的数组或者集合,而不是返回null.如果返回了null,客户端程序员就要检测返回的是不是null,然后才能 进行下一步操作,否则就会引发NullPointException.但是如果是返回的的是空数组或者集合,就不会再后续的使用这个对象上,引发 空指针