-------2019/1/28------ 10min
public class Solution {
public void MoveZeroes(int[] nums) {
int t = 0; int p = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i]!=0)
{
nums[t++] = nums[i];
}
else if(nums[i]==0)
{
p++;
}
}
int c = 0;
for (int i = nums.Length-1; i >=0; i--)
{
if (c<p)
{
nums[i] = 0;
c++;
}
}
}
}
-------2019/1/28------ 10min
LeetCode 283 Move Zeroes
(本人专注于刷leetcode全部题c#语言算法,后期发视频教程)
嘻嘻,开始做题喽。
首先解释一下题意: 很简单对不对,就是把数组中的0移到数组的最后。
我想, 用排序的方法将0交换到最后的不等于0的元素,结果失去了意义也太复杂。
重新整理思路:
理解/核心: 定义一个变量,将不等于0的赋值在原数组前面,赋值完成剩下的0补位。答案如下:
答案
执行用时: 360 ms, 在Move Zeroes的C#提交中击败了94.23% 的用户
static void Main(string[] args)
{
int[] tes = new int[] {7,20,0,2, 3, 0, 9, 0, 12 };
tes = Get(tes);
for (int i = 0; i < tes.Length; i++)
{
Console.WriteLine(tes[i]);
}
Console.ReadKey();
}
private static int[] Get(int[] nums)
{
int var = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i]!=0)
{
nums[var++] =nums[i];
}
}
for (int i = var; i < nums.Length; i++)
{
nums[i] = 0;
}
return nums;
}
其中:
nums[var++] =nums[i];
可以写成 nums[var] =nums[i];
var++;
我运行的:
题目:
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums
should be [1, 3, 12, 0, 0]
.
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
如果对答案有异议,欢迎各路大神指点,并在评论区留下c#代码,相互学习。