我承认,这是我的项目的功课,我来到这里因为我不知道该怎么做。
我必须做什么
编写一个方法editUsingStrands(),它返回增长的整数字段。返回的字段应与指定字段中存储的大小相同且值相同。该算法不应超过O(n3)复杂度的增长。
我使用LIST完成了这个,但我发现是不允许的,所以不是任何复杂的函数,如Sort,RemoveAt,Count ...(如果所有都是复杂的函数,dunno,但我知道它们是不允许的)。
有人可以帮助我重新创建它而不使用LIST和那些功能吗?
非常感谢!
我的代码
static int[] editUsingStrands(int[] field)
{
List<int> organizedField = new List<int>();
List<int> xField = new List<int>(field);
while(xField.Count > 0)
{
List<int> sublist = new List<int>();
sublist.Add(xField[0]);
xField.RemoveAt(0);
for(int i=0; i< xField.Count; i++)
{
if(xField[i] > sublist[sublist.Count-1])
{
sublist.Add(xField[i]);
xField.RemoveAt(i);
i--;
}
}
organizedField = new List<int>(mergeTogether(organizedField.ToArray(), sublist.ToArray()));
}
return organizedField.ToArray();
static int[] mergeTogether(int[] field1, int[] field2)
{
List<int> organizedMergedField = new List<int>();
int counter1 = 0, counter2 = 0;
while ((counter1 + counter2) < (field1.Length + field.Length))
{
if (field1.Length > counter1)
{
if (field2.Length > counter2)
{
if (field1[counter1] < field2[counter2])
{
organizedMergedField.Add(field1[counter1]);
counter1++;
}
else
{
organizedMergedField.Add(field2[counter2]);
counter2++;
}
}
else
{
organizedMergedField.Add(field1[counter1]);
counter1++;
}
}
else
{
organizedMergedField.Add(field2[counter2]);
counter2++;
}
}
return organizedMergedField.ToArray();
}