C#.NET面試題彙總系列九:常見演算法
阿新 • • 發佈:2022-03-01
C#.NET面試題彙總系列九:常見演算法
菲波納契數列
要點:遞迴的使用,終止條件
有一列數1,1,2,3,5,........求第30個數
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if (i > 0 && i <= 2)
return 1;
else
return Foo(i - 1) + Foo(i - 2);
}
氣泡排序
要點:第二個迴圈的開始位置
int temp = 0; for (int i = 0; i < arr.Length-1; i++) { for (int j = i; j < arr.Length-1; j++) { if (arr[i] > arr[j+1]) { temp = arr[i]; arr[i] = arr[j + 1]; arr[j + 1] = temp; } } }
求N的階乘
要點:遞迴,終止條件(1x2x..),如果n為2或1那就是本身
public static int Fun(int i)
{
if (i == 1) { return 1; }
if (i == 2) { return 2; }
return i * (Fun(i - 1));
}
產生一個指定長度的int陣列並隨機插入數
要點:int[] 陣列沒有檢查的方法,ArrayList有Contains方法
public static void Fun(int len) { int[] arr = new int[len]; ArrayList myList = new ArrayList(); Random rad = new Random(); while (myList.Count < len) { int num = rad.Next(1, len + 1); if (!myList.Contains(num)) { myList.Add(num); } } for (int i = 0; i < len; i++) { arr[i] = (int)myList[i]; } myList.Sort(); Console.WriteLine(myList[len - 1]); }
不使用第三方變數來交換兩個變數的值
方法一:算術運算
int a = 10,b = 12;
a=b-a; //a=2;b=12
b=b-a; //a=2;b=10
a=b+a; //a=12;b=10
方法二:位運算,通過異或運算也能實現變數的交換
int a = 10, b = 12; //a=1010^b=1100;
a = a ^ b; //a=0110^b=1100;
b = a ^ b; //a=0110^b=1010;
a = a ^ b; //a=1100=12;b=1010;
方式三:變數本身交換數值
b = (a + b) - (a = b);
查詢一個int陣列中的最大最小值
static void Main(string[] args) { int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 }; int max = arr[0], min = arr[0]; for (int i = 0; i < arr.Length; i++) { if (arr[i] >= max) { max = arr[i]; } if (arr[i] < min) { min = arr[i]; } } Console.WriteLine(string.Format("max{0},min{1}", max, min)); }
判斷字串是否為迴文字串
static void Main(string[] args)
{
string str = "abcdcba";
Console.WriteLine(Fun(str));
}
private static bool Fun(string str)
{
for (int i = 0; i < str.Length/2; i++)
{
if (str[i] != str[str.Length - i - 1]) return false;
}
return true;
}
到達勝利之前無法回頭!