浏览列表,同时跟踪max,以及max2,你会得到O(N)与O(N * log(N))时间复杂度: // Maximum value int max = Math.Max(input[input.Count - 1], input[input.Count - 2]); // Second greatest int max2 = Math.Min(input[input.Count - 1], input[input.Count - 2]); // i >= 0: Comparing with 0 is slightly faster then with Count for (int i = input.Count - 3; i >= 0; --i) { int v = input[i]; if (v >= max) { max2 = max; max = v; } else if (v > max2) max2 = v; }编辑:如果重复项应被忽略(请参见下面的评论),则答案[1, 2, 3, 4, 4, 4, 4]应为3,而不是4: // Maximum value int max = int.MinValue; // Second greatest int max2 = int.MinValue; // i >= 0: Comparing with 0 is slightly faster then with Count for (int i = input.Count - 1; i >= 0; --i) { int v = input[i]; if (v > max) { max2 = max; max = v; } else if (v > max2 && v != max) max2 = v; }