• 算法系列之一


    (1) 对于一个单向链表,试写出找到它的倒数第m个元素的函数,注意变量命名、注释、时间复杂度、空间复杂度。注:要求写出可编译并可以运行通过的程序代码。

    https://github.com/yangxt225/findMLastNode

    (2) 写一个千位分隔符算法,函数原型是
    char * format_thousands_separator(unsigned long n);
    要求实现效果是:
    1.使用者不需要释放返回的字符串指针
    2.支持最多调用16次而不返回相同指针地址
    可以用以下方式测试:
    printf("num1(%s), num2(%s), num3(%s) ",
        format_thousands_separator(0),
        format_thousands_separator(123456),
        format_thousands_separator(23456789));
    注:要求写出可编译并可以运行通过的程序代码。

    https://github.com/yangxt225/format_thousands_separator

    (3) 实现A*寻路算法.

    要求写出可编译运行通过的程序代码.

    A*讲解可参阅博文:A*寻路算法

    实现代码:

    https://github.com/yangxt225/AStar

    (4) 打印10000以内的所有质数,注意时间空间复杂度.

     https://github.com/yangxt225/isPrime

    (5) 判断主机字节序是大端还是小端.

    什么是大/小端呢?所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址。(在低位地址的角度看,如果低位地址存放的是高位值,那么则是大端;如果低位地址存放的是低位值,那么则是小端.)比如十进制数0x11223344在大端机上是"(低地址)11223344(高地址)",在小端机上是"44332211",而一个机器是大端还是小端要看cpu类型以及运行在上面的操作系统。同一款cpu在不同的操作系统使用的大小端情况是不同的。当然我们通常使用的x86+windows是小端。

    https://github.com/yangxt225/bigOrLittleEndian

    (6) 字符串逆置.注意效率.

    这里实现三种方法, 分别采用双指针,递归和异或(使用异或来进行字符的原地交换);

    https://github.com/yangxt225/strReserve 

    (7) 已知矩形的左下角(MinX, MinY),右上角(MaxX, MaxY)坐标,判断两个矩形是否相交:

    思路1: 判断相交的情况比较麻烦,所以可以采用判断不相交的情况,其他情况就是相交了.

    思路2: 计算两个矩阵的中心点, 分别判断中心点的距离是否大于两个矩阵之间的宽,高.

    程序只需做几个简单的条件判断,自行完成;

    (8) 1. 读取一个文件中的内容,删除所有行首的"Line"(如果有的话);

      2. 求和:求n到m的和,支持-10^9 < m, n < 10^9;

    https://github.com/yangxt225/fileStrOp

    (9) C++实现各种排序算法:

    使用C++实现了几种排序算法(冒泡,插入,选择,快速,堆,合并,基数,希尔排序)

    https://github.com/yangxt225/sort

    (10)

    1. 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字.

    思路:数组中有两个数字只出现1次,直接"异或"一次只能得到这两个数字的异或结果,若题目中这两个只出现1次的数字分别为A和B,如果能将A,B分开到二个数组中,那显然符合“异或”解法的关键点了。因此这个题目的关键点就是将A,B分开到二个数组中。由于A,B肯定是不相等的,因此在二进制上必定有一位是不同的。根据这一位是0还是1可以将A,B分开到A组和B组.

    2. 一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字.

     分析可参见博文: http://zhedahht.blog.163.com/blog/static/25411174201283084246412/

      https://github.com/yangxt225/findTwoNotRepeatNumberInArray

    (11) C++标准中,虚表指针在类的内存结构位置没有规定,不同编译器的实现可能是不一样的。请实现一段代码,判断当前编译器把虚表指针放在类的内存结构的最前面还是最后面

    https://github.com/yangxt225/vptrPos

    (12)  欧几里得算法求最大公约数算法的递归和非递归C实现;

    扩展欧几里得算法求线性不定方程的递归和非递归C实现:

    https://github.com/yangxt225/GCD

    (13) RSA算法里头经常要用到“求x的n次方模m”这样的过程,通常使用O(log(n))的模重复平方算法来实现. c实现源码:

    https://github.com/yangxt225/powerMod

  • 相关阅读:
    .NET Core 2.1 EF(Entity Framework) Core Sqlite配置和使用分享
    .NET(C#) System.Linq中实现多列group by(分组)的示例代码
    对一个列表内节点进行拖拽排序
    WVP ZLMediaKit搭建记录
    GB28181国标视频平台播放失败或者信令不通时如何抓包分析
    tippy.js 好用的tooltip提示插件使用详解
    .NET Core 使用 DotnetSpider 抓取页面教程
    net core上传文件
    .NET Core appsettings.json 取值
    Kubernetes——X.509数字证书认证
  • 原文地址:https://www.cnblogs.com/yyxt/p/5645413.html
Copyright © 2020-2023  润新知