一道算法题:
查找一个数组中第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;
}
查找数组中第N大数并交换
本文介绍了一个算法问题:如何在一个整数数组中找到第N大的数,并将其与数组中的最大数进行交换。文章提供了具体的实现方法,包括使用双向链表进行排序和寻找特定元素的过程。
826

被折叠的 条评论
为什么被折叠?



