首页 > 笔经面经 > 6/20 华为机试

6/20 华为机试

头像
牛客970551407号
编辑于 2021-06-21 14:43:52 APP内打开
赞 4 | 收藏 29 | 回复3 | 浏览4614
总体比较简单,一个小时就做完了,测试用例全过,语言C#。但是光顾着过了也没再优化一下,还剩那么多时间不应该着急的……

1. 给一个范围,找勾股数组合,要求勾股数两两互质,没有就输出NA,比如[5,10]就是NA,因为6,8,10不互质,输出结果按a,b,c升序排列
就是考了一个GCD,排列的时候写了一个IComparer就完了,注意三角形要求a+b>c
public static void Find(int start, int end)
{
    for (int i = start; i < end; i++)
    {
        for (int j = i + 1; j < end; j++)
        {
            int k = (int)Math.Sqrt(i * i + j * j);
            if (k * k != i * i + j * j || i + j <= k)
                continue;
            if (IsValid(i, j) && IsValid(j, k) && IsValid(i, k))
                ans.Add(new res(i, j, k));
        }
    }
}
public static int GCD(int a, int b)
{
    if (a < b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
    if (a % b == 0)
        return b;
    else
        return GCD(a % b, b);
}
public static bool IsValid(int a, int b)
{
    if (GCD(a, b) == 1 || GCD(a, b) == a || GCD(a, b) == b)
        return true;
    return false;
}


2. 太简单了我都没用本地IDE调,好像是给字符串a和b,找出b和a重复部分按升序排列,用SortedSet就完了

3. 给一个字符串,变成二叉树然后中序遍历,{}里是子树,,分割左子树和右子树,比如a{b{d{e{g,h{,i}}},c{f}},输出为dbgehijafc
构建二叉树,这段代码我写的比较丑,用while硬套的,拿递归或者栈写会好看很多,构建完以后就是送分题按左中右遍历
TreeNode start = new TreeNode(line[0]);
TreeNode cur = start;
int i = 1;
while(i<line.Length)
{
    if (line[i] == '{')
    {
        i++;
        if (line[i] == ',')
        {
            i++;
            if (char.IsLetter(line[i]))
            {
                TreeNode r = new TreeNode(line[i]);
                r.root = cur;
                cur.right = r;
                cur = cur.right;
            }
            i++;
        }
        else if (char.IsLetter(line[i]))
        {
            TreeNode l = new TreeNode(line[i]);
            l.root = cur;
            cur.left = l;
            i++;
            cur = cur.left;
        }
    }
    if (line[i] == ',')
    {
        cur = cur.root;
        i++;
        if (char.IsLetter(line[i]))
        {
            TreeNode r = new TreeNode(line[i]);
            r.root = cur;
            cur.right = r;
            cur = cur.right;
        }
        i++;
    }
    if (line[i] == '}')
    {
        cur = cur.root;
        i++;
    }
}
Traverse(start);


3条回帖

回帖
加载中...
话题 回帖

相关热帖

笔经面经近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐