2010-07-10 27 views

回答

4

您也可以嘗試這個 -

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class secondHighestLowest : System.Web.UI.Page 
{ 
    int[] arr = new int[10] { 45, 3, 64, 6, 24, 75, 3, 6, 24, 45 }; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     secondHighestLowestNumber(); 
     secoundLowestNumber(); 
    } 

    private void secondHighestLowestNumber() 
    { 
     int firstHighestNumber = arr[0]; 
     int secondHighestNumber = arr[0]; 
     for(int i = 0; i<arr.Length; i++) 
     { 
      if (arr[i]>firstHighestNumber) 
      { 
       firstHighestNumber = arr[i]; 
      } 
     } 

     for (int x = 0; x < arr.Length; x++) 
     { 
      if (arr[x]>secondHighestNumber && firstHighestNumber!=arr[x]) 
      { 
       secondHighestNumber = arr[x]; 
      } 
     } 

     Response.Write("secondHighestNumber---- " + secondHighestNumber + "</br>"); 
    } 

    private void secoundLowestNumber() 
    { 
     int firstLowestNumber = arr[0]; 
     int secondLowestNumber = arr[0]; 
     for (int i = 0; i < arr.Length; i++) 
     { 
      if (arr[i] < firstLowestNumber) 
      { 
       firstLowestNumber = arr[i]; 
      } 
     } 

     for (int x = 0; x < arr.Length; x++) 
     { 
      if (arr[x] < secondLowestNumber && firstLowestNumber != arr[x]) 
      { 
       secondLowestNumber = arr[x]; 
      } 
     } 

     Response.Write("secondLowestNumber---- " + secondLowestNumber + "</br>"); 
    } 
} 

希望這是有益:)

+0

要格式化代碼塊,請縮進4個空格,或將其選中並單擊編輯器工具欄上的代碼按鈕(101010)。 – Helen 2010-07-10 09:03:22

+0

謝謝海倫:) – 2010-07-10 09:11:57

4

您沒有指定複雜性要求:一種方法是按降序對數組進行排序並選擇第一項,第二項和第三項。

另一個是建立一個堆,然後執行刪除根3次(每次刪除後重建堆)。

4

假設你已經在陣列中至少2項,你可以使用OrderBy()ElementAt()

var numbers = new[] { 855, 3, 64, 6, 24, 75, 3, 6, 24, 45 }; 
var secondLowest = numbers.OrderBy(num => num).ElementAt(1); 
var secondHighest = numbers.OrderBy(num => num).Reverse().ElementAt(1); 

獲取最高和最低是簡單的,並且可以使用Max()Min()完成 LINQ方法。

var lowest = numbers.Min(); 
var highest = numbers.Max(); 

如果你擔心的複雜性,你可以使用Selection algorithm達到更好的效果。使用它你可以執行O(n)複雜的操作。

+1

這,恕我直言,是一個令人震驚的方式來做到這一點。因此downvote。 (提供解釋,而不是論點)。 – 2010-07-10 08:37:34

+2

@silky:這是如此令人震驚?你能詳細說明嗎?在像這樣的小集合上使用LINQ聽起來像是一個非常自然而且非常明顯的選擇...... – 2010-07-10 11:14:43

+0

創建一個返回整數數組中最高值的方法實際上是之前的一個採訪問題。 Max()實際上證明了如何成爲最簡單的解決方案。 – Chris 2010-11-04 16:47:29

0
 int[] i = new int[] { 4, 8, 1, 9, 2, 7, 3 }; 
     Array.Sort(i); 
     Console.WriteLine("Highest number :" + i[i.Length-1]); 
     Console.WriteLine("Second highest number :"+i[i.Length-2]); 
     Console.WriteLine("Lowest number :" + i[i.Length-i.Length]); 
     Console.WriteLine("Second Lowest number :" + i[i.Length -i.Length+1]); 

     Output : Highest number : 9 

       Second highest number : 8 

       Lowest number : 1 

       Second Lowest number : 2 
-1
int[] myUnSortArray = { 1, 5, 8, 3, 10, 6, 19, 5, 4, 4 }; 

int[] SortedArray = (from number in myUnSortArray 
        orderby number ascending 
        select number).ToArray(); 

int highestValue = SortedArray.Max(); 
int SecondHighest = SortedArray.Last(m => m < highestValue); 
4

使用LINQ概念

var a = new int[] { 855, 3, 64, 6, 24, 75, 3, 6, 24, 45 }; 

var Max = a.Max(z => z); 
var Min = a.Min(z => z); 
var SMax = a.OrderByDescending(z=>z).Skip(1).First(); 
var SMin = a.OrderBy(z => z).Skip(1).First(); 
+0

SMax和SMin只適用於數組沒有重複記錄的情況。 SMin仍然會返回3作爲答案,應該是6. – 2016-11-20 02:16:54

0

時,爲什麼可以做兩個循環在

 int[] myArray = new int[] { 2, 4, 3, 6, 9 }; 

     int max1 = 0; 
     int max2 = 0; 

     for (int i = 0; i < myArray.Length; i++) 
     { 
      if (myArray[i] > max1) 
      { 
       max2 = max1; 
       max1 = myArray[i]; 

      } 
      else 
      { 
       max2 = myArray[i]; 
      } 
     } 

     Console.WriteLine("first" + max1.ToString()); 
     Console.WriteLine("Second" + max2.ToString()); 
     Console.ReadKey(); 
+0

在int [] myArray = new int [] {9,4,3,6,2}的情況下不起作用。 – 2017-08-14 16:59:47

0

我首先使用選擇排序算法按升序排列它們,然後我顯示值。

static void Main(string[] args) 
    { 
     int[] Num =new int[] { 3, 4, 5, 6, 7, 0,99,105,55 }; 

     int temp; 
     for(int a=0;a<Num.Length-1;a++) 
     { 
      for(int b=a+1;b<Num.Length;b++) 
      { 
       if(Num[a]>Num[b]) 
       { 
        temp = Num[a]; 
        Num[a] = Num[b]; 
        Num[b] = temp; 
       } 
      } 

     } 


     Console.WriteLine("Max value ="+Num[Num.Length-1]+"\nSecond largest Max value="+ Num[Num.Length - 2]+"\nMin value =" + Num[0] + "\nSecond smallest Min value=" + Num[1]); 
     Console.WriteLine("\nPress to close"); 
     Console.ReadLine(); 
    } 
0

該算法適用於重複記錄。

int[] intArrayInput= new int[] { 855, 3, 64, 6, 24, 75, 3, 6, 24, 45, 855 }; 

使用排序:

Array.Sort(intArrayInput); 
int intMax = intArrayInput[intInput.Length - 1]; 
int intLow = intArrayInput[0]; 

而且使用LINQ:

int intSecondMax = intArrayInput.OrderByDescending(x => x).Distinct().Skip(1).First(); 
int intSecondLow = intArrayInput.OrderBy(x => x).Distinct().Skip(1).First(); 
相關問題