Intenta 笔试总结

1. struct 构造函数

struct A
{
    int a;
    int b;
    A() : b(1), a(b) {}
};

这样定义结构体会出现什么问题吗?
这里有一个初始化队伍的问题。初始化队伍这里指的就是构造方法中冒号后面的部分。
编译器在处理初始化队伍时,会根据成员变量的声明次序重新排序。也就是说,虽然构造方法是先对b进行初始化,但是,根据a和b的声明次序,实际上是先对a初始化,然后再对b进行初始化。这样一来,由于b还未初始化,所以最终的结果是a的值并不是1。下面是我在visual studio 2010下输出的结果:
请在这里输入引用内容
-858993460 1
所以建议,如果是用一个数据成员对另一个数据成员进行初始化,即赋值,最好是把这样的代码写在构造函数体内(显式代码)。

2. 计算X的N次幂的最小时间复杂度

时间复杂度为O(logn)的方法,递归关系可以表示为pow(x,n) = pow(x,n/2)*pow(x,n-n/2)

double pow(double x, int n)
{
    if(n==0)
        return 1.0;
    if(n<0)
        return 1.0/pow(x,-n);
    double half = pow(x,n>>1);
    if(n%2==0)
        return half*half;
    else
        return half*half*x;
}

3. 整型除以整型

int整数除以int整数一定得到的是int整数.
除数或被除数至少有一个是double或float,才有可能得到小数.

4. ASCII码与字符相互转换

在计算机存储中,用ASCII码表示字符,如字符char a,及整形int m:

  1. 获取字符的ASCII码:(int)a
  2. 获取ASCII码对应的字符:(char)m
  3. 字符之间相加减,实质是对应的ASCII码相加减,结果为整形,如下列:
    a - b 即a的ASCII码减去b的ASCII码,记为int k = a - b

5. 判断两个字符串是否由相同字符组成(大小写不敏感)

int upperToLower(char ch)
{
    int ascii = int(ch);
    if (ascii < 97)
    {
        ascii += 32;
    }
    return ascii;
}
 
bool isMatch(const string& s1, const string& s2)
{
    int len1 = s1.length();
    int len2 = s2.length();
    if (len1 != len2)
        return false;
    int count[256] = { 0 };
    for (int i = 0; i < len1; ++i)
    {
        count[upperToLower(s1[i])]++;
        count[upperToLower(s2[i])]--;
    }
    for (int i = 0; i < len1; ++i)
    {
        if (count[upperToLower(s1[i])] != 0)
            return false;
    }
    return true;
}

 

posted on 2020-11-26 17:46  只争朝夕,不负韶华!  阅读(179)  评论(0)    收藏  举报