一道算法题:
查找一个数组中第N大的数,并与第一大的数交换
1. 先写一个方法,查找一个数组中第N大的数
/// <summary>
/// While input an int array and an int number n, the method will return the n'th big number in the array
/// </summary>
/// <param name="array">the int array</param>
/// <param name="n">the int number</param>
/// <returns></returns>
public static int FindNumber(int[] array, int n)
{
LinkedList<int> numberLink = new LinkedList<int>();
numberLink.AddFirst(new LinkedListNode<int>(array[0]));
if (array.Length > 1)
{
for (int i = 1; i < array.Length; i++)
{
LinkedListNode<int> currentNode = numberLink.First;
while (currentNode.Value > array[i])
{
if (currentNode == numberLink.Last)
{
numberLink.AddAfter(currentNode, array[i]);
continue;
}
else
{
currentNode = currentNode.Next;
}
}
if (currentNode.Value < array[i])
{
numberLink.AddBefore(currentNode, array[i]);
}
}
}
if (n > numberLink.Count || n < 1)
{
throw new ArgumentOutOfRangeException();
}
LinkedListNode<int> outputNode = numberLink.First;
int count = 1;
while (count < n)
{
outputNode = outputNode.Next;
count++;
}
return outputNode.Value;
}
2. 根据FindNumber方法写出解决该问题方法
public static int[] ReplaceNumber(int[] array,int n)
{
int number = FindNumber(array, n);
int biggestNumber=FindNumber(array,1);
for (int i = 0; i < array.Length; i++)
{
if (array[i] == number)
{
array[i] = biggestNumber;
}
else if (array[i] == biggestNumber)
{
array[i] = number;
}
}
return array;
}