Tạo phương thức MoveZeros, duyệt mảng đếm số phần tử khác 0, dịch chúng lên đầu mảng. Sau đó điền 0 vào các vị trí còn lại. Trả về ngay nếu mảng null hoặc rỗng. Kết quả lưu trong chính mảng nums. Độ phức tạp O(N) vì duyệt mảng một lần.
Độ phức tạp thời gian: O(N)
Độ phức tạp không gian: O(1)
Ví dụ
public class Arrays
{
public void MoveZeros(int[] nums)
{
if (nums == null || nums.Length == 0)
{
return;
}
int count = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] != 0)
{
nums[count] = nums[i];
count++;
}
}
for (int i = count; i < nums.Length; i++)
{
nums[i] = 0;
}
}
}
static void Main(string[] args)
{
int[] nums = { 0, 1, 0, 3, 12 };
Arrays s = new Arrays();
s.MoveZeros(nums);
foreach (var item in nums)
{
Console.WriteLine(item);
}
// Output: 1, 3, 12, 0, 0
}
Kết quả đầu ra
1
3
12
0
0