• 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;
    }
    
  • 相关阅读:
    Github Actions 中 Service Container 的使用
    EFCore 5 新特性 SaveChangesInterceptor
    使用 Xunit.DependencyInjection 改造测试项目
    WeihanLi.Npoi 1.11.0/1.12.0 Release Notes
    新版本 swagger 组件中 Servers 的 坑
    JDBC 规范中文版 4.2- 第五章 类和接口
    JDBC 规范中文版 4.2 -第四章 概览
    JDBC 规范中文版 4.2 -第三章 新特性
    JDBC 规范中文版 4.2 -第二章 目标
    Serve static assets with an efficient cache policy
  • 原文地址:https://www.cnblogs.com/weiyongguang/p/15950162.html
Copyright © 2020-2023  润新知