二分搜索
<2>找出最大值和第二大值 时间复杂度O(n)
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int> { 10, 3, 6, 4, 7, 1, 9, 2 };
var v = getMax(list, 0, list.Count - 1);
}
static (int, int) getMax(List<int> list, int start, int end)
{
if (start!=end)
{
int middle = (start + end) / 2;
var left = getMax(list, start, middle);
var right = getMax(list, middle + 1, end);
var temp = new List<int> { left.Item1, left.Item2, right.Item1, right.Item2 };
temp.Sort();
return (temp[2], temp[3]);
}
else
return (int.MinValue, list[start]);
}
}