尝试使用 for 和 while 循环解决 88. 使用 C# 合并排序数组。 Leetcode 指示将正确的输出保存在 [nums1] 数组中,而不是返回输出。这些是合并排序数组的假设和输入。
public void Merge(int[] nums1, int m, int[] nums2, int n) {
if (m == 0)
{
Console.WriteLine("Num 1 Before: {0}", nums1[0]);
nums1 = (int[])nums2.Clone();
Console.WriteLine("Num 1 After: {0}", nums1[0]);
}
else if ( n != 0 )
{
int arrTwoIt = 0;
for ( int i = m; i <m+n; i++)
{
nums1[i] = nums2[arrTwoIt++];
}
int arrOneIt = 0;
arrTwoIt = m;
while (arrOneIt < m)
{
if (nums1[arrOneIt] > nums1[arrTwoIt])
{
int leftItemTemp = nums1[arrOneIt];
nums1[arrOneIt] = nums1[arrTwoIt];
nums1[arrTwoIt++] = leftItemTemp;
}
arrOneIt++;
}
}
}
我不知道从那里去哪里。我不确定我错过了什么。如有任何帮助,我们将不胜感激。
您可以先合并两个数组并简单地调用
Array.Sort()
方法。如果您不想使用任何内置方法,您可以使用自定义逻辑进行排序。
public void Merge(int[] nums1, int m, int[] nums2, int n) {
for(int i = 0; i < nums2.Length; i++){
nums1[i + m] = nums2[i];
}
Array.Sort(nums1);
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Console1.Core.Algorithms
{
class Merge_Sorted_Array
{
static void Main(string[] args)
{
int[] nums1 = { 1, 2, 3, 0, 0, 0 }; //here you can put your values
int[] nums2 = { 2, 5, 6 }; //here you can put your values
int count = 0;
for (int i = 0; i < nums1.Length; i++)
{
count++;
}
for (int i = 0; i < nums2.Length; i++)
{
count++;
}
int[] nums3 = new int[count];
for (int i = 0; i < nums1.Length; i++)
{
nums3[i] = nums1[i];
}
int d = nums1.Length;
for (int i = 0; i < nums2.Length; i++)
{
nums3[d] = nums2[i];
d++;
}
List<int> arrayList = new List<int>();
for (int i = 0; i < nums3.Length; i++)
{
if (nums3.ElementAt(i).Equals(0))
{
continue;
}
else
{
arrayList.Add(nums3.ElementAt(i));
}
}
arrayList.Sort();
int[] ans = new int[arrayList.Count];
for (int i = 0; i < arrayList.Count; i++)
{
ans[i] = arrayList.ElementAt(i);
}
for (int i = 0; i < ans.Length; i++)
{
Console.WriteLine(ans.ElementAt(i));
}
}
}
}