• 常用函数实现


    求最大公约数

    int gcd(int a, int b)
    {
        if (a == 0 || b == 0)
            return 0;
        int tmp = 0;
        while (b != 0)
        {
            tmp = b;
            b = a%b;
            a = tmp;
        }
        return a;
    }

    交换swap

    template <class T>
    void swap(T &a, T &b)
    {
        T c(std::move(a));
        a = std::move(b);
        b = std::move(c);
    }
       a = a ^ b;
        b = a ^ b;
        a = a ^ b;

    求某个区间随机数

    int RandomlnRange()
    {
        if (start > end)
            return -1;
        return rand() % (end - start + 1) + start;
    }

    分割数组Partition

    int Partition_v1(vector<int>& num, int low, int high)
    {
        int pivot = num[low];
        while (low < high)
        {
            while (low < high && num[high] >= pivot)
                --high;
            num[low] = num[high];
            while (low < high && num[low] <= pivot)
                ++low;
            num[high] = num[low];
        }
        num[low] = pivot;
        return low;
    }

    分解质因数(面试题考过)

    void Analyse(int n)
    {
        //打印出  
        int i;
        for (i = 2; i <= sqrt(static_cast<double>(n)); i++)
        {
            if (n % i == 0)
            {
                n = n / i;
                cout << i << "*";
                i--;
            }
        }
        cout << n << endl;
    
    }

    不用加号计算两数和

    int add(int a, int b)
    {
        if (b == 0)
            return a;
        int sum = a^b;
        int carry = (a&b) << 1;
        return add(sum, carry);
    }

    strcpy

    char *strcpy(char *strDest, const char *strSrc)
    {
        assert(strDest != NULL && strSrc != NULL);
        char *address = strDest;
        while ((*strDest++ = *strSrc++) != '');
        return address;
    }

    二分查找

     1  #include <iostream>
     2 
     3 using namespace std;
     4 
     5 /*
     6 *二分查找思想:1、数组从小到大排序;2、查找的key每次和中间数比较,如果key小于mid
     7 查找mid左侧的数组部分;如果key大于mid,则查找mid右侧的数组部分;如果相等,则直接返回mid。
     8 
     9 输入:排序数组-array,数组大小-aSize,查找值-key
    10 返回:返回数组中的相应位置,否则返回-1
    11 */
    12 //非递归查找
    13 int BinarySearch(int *array, int aSize, int key)
    14 {
    15     if ( array == NULL || aSize == 0 )
    16         return -1;
    17     int low = 0;
    18     int high = aSize - 1;
    19     int mid = 0;
    20 
    21     while ( low <= high )
    22     {
    23         mid = (low + high )/2;
    24         
    25         if ( array[mid] < key)
    26             low = mid + 1;
    27         else if ( array[mid] > key )   
    28             high = mid - 1;
    29         else
    30             return mid;
    31     }
    32     return -1;
    33 }
    34 //递归
    35 int BinarySearchRecursive(int *array, int low, int high, int key)
    36 {
    37     if ( low > high )
    38         return -1;
    39     int mid = ( low + high )/2;
    40     
    41     if ( array[mid] == key )
    42         return mid;
    43     else if ( array[mid] < key )
    44         return BinarySearchRecursive(array, mid+1, high, key);
    45     else
    46         return BinarySearchRecursive(array, low, mid-1, key);
    47 }
    48 
    49 int main()
    50 {
    51     int array[10];
    52     for (int i=0; i<10; i++)
    53         array[i] = i;
    54 
    55     cout<<"No recursive:"<<endl;
    56     cout<<"position:"<<BinarySearch(array, 10, 6)<<endl;
    57     cout<<"recursive:"<<endl;
    58     cout<<"position:"<<BinarySearchRecursive(array, 0, 9, 6)<<endl;
    59 
    60     return 0;
    61 }
  • 相关阅读:
    两数之和
    输入一个int型数据,计算出该int型数据在内存中存储时1的个数。
    MySQL事务机制(Transaction)
    JAVA 之 深入理解String类
    MySQL 之 SQL练习
    python常用函数及循环
    python多版本配置pyenv
    ES6语法的简单示例
    学习笔记190—利用matlab求解方程组的解
    学习笔记189—pandas 获取Dataframe元素值的几种方法
  • 原文地址:https://www.cnblogs.com/raichen/p/5803498.html
Copyright © 2020-2023  润新知