Unity Technologies 2019 校招面试总结

宣讲会人太少选择的线上笔试,笔试1h+一面+二面+三面

三面:

写一个简单不加括号正则表达式,如果不合法就返回false

后面邮件发的,没写完整

int calcu(char *str, int n )
{
	int i, j, k;
	float res;

	int SIZE_1 = (n / 2 + 1)*sizeof(int);
	int SIZE_2 = n / 2;
	float* num = new float[SIZE_1];
	char* exp = new char[SIZE_2];

	for (i = 0, j = 0, k = 0; i<n; i++)
	{
		if (i % 2 == 0)
			num[j++] = str[i] - '0';
		else
			exp[k++] = str[i];
	}
	/*----------乘除--------*/
	for (i = 0, j = 1; i<n / 2; ++i)
	{
		if (exp[i] != '*'&&exp[i] != '/')
		{
			j = 1;
			continue;
		}
		if (exp[i] == '*')
		{
			num[i + 1] *= num[i];
			for (k = 0; k<j; k++)
			{
				num[i - k] = num[i + 1];
			}
			j++;
		}
		else if (exp[i] == '/')
		{
			num[i + 1] = num[i] / num[i + 1];
			for (k = 0; k<j; k++)
			{
				num[i - k] = num[i + 1];
			}
			j++;
		}
	}
	/*----------加减--------*/
	res = num[0];
	for (i = 0, j = 1; i<n / 2; i++)
	{
		if (exp[i] == '+')
			res += num[i + 1];
		else if (exp[i] == '-')
			res -= num[i + 1];
	}

	delete num;
	num = nullptr;
	
	delete exp;
	exp = nullptr;

	return res;
}

二面:

输出链表中点,智力题

struct ListNode{
    int val;
    ListNode* next;
};

int len(ListNode* head)
{
    int n=0;
    ListNode * node=head;
    while(node!=nullptr)
    {
        n++;
        node=node->next;
    }
}
ListNode * find(ListNode* head)
{
    int length=len(head);
    int n=0;
    
    if(length&1)
        n=length/2+1;
    else
        n=length/2;
    
    ListNode* node=head;
    for(int i=1;i<=n;i++)
    {
        node=node->next;
    }
    
    return node;
}

ListNode* find(ListNode* head)
{
    
    ListNode* p1=head->next;
    ListNode* p2=p1->next;
    
    while(p2!=nullptr&&p2->next!=nullptr)
    {
        p1=p1->next;
        p2=p2->next->next;
    }
    return p1;
}

一面:

笔试题说一遍,C++基础,多态代码

class A{
public:
    virtual void fun(){
        cout << "a" << endl;
    }
};
class B :A{
    virtual void fun(){
        cout << "b" << endl;
    }
};

笔试:

/*-----1 正则表达------*/
class Solution{
public:
	bool Ismatch(char* s, char* p)
	{
		if (!s || !p)
			return false;
		return match(s, p);
	}
	bool match(char* s, char* p)
	{
		if (*s == '\0'&&*p == '\0')
			return true;
		if (*s != '\0'&&*p == '\0')
			return false;

		if (*(p + 1) == '*')
		{
			if ((*p == *s) || (*p == '.'&&*s != '\0'))
			{
				return match(s + 1, p + 2) || match(s + 1, p) || match(s, p + 2);
			}
			else
				return match(s, p + 2);
		}
		if (*p == *s || (*p == '.'&&*s != '\0'))
		{
			return match(s + 1, p + 1);
		}
		return false;
	}
};

 

/*-----3 链表交点------*/

struct ListNode{
	int val;
	ListNode* next;
};
int len(ListNode *head)
{
	int n = 0;
	ListNode *node = head;
	while (node != nullptr)
	{
		n++;
		node = node->next;
	}
	return n;
}
ListNode * getIntersectionNode(ListNode *H1, ListNode* H2)
{
	int n1 = len(H1);
	int n2 = len(H2);
	int n = n1 - n2;

	ListNode *Long = H1;
	ListNode *Short = H2;

	if (n2 > n1)
	{
		Long = H2;
		Short = H1;
		n = n2 - n1;
	}
	for (int i = 0; i < n; i++)
	{
		Long = Long->next;	
	}
	while ((Long != nullptr) && (Short != nullptr) && (Long != Short))
	{
		Long = Long->next;
		Short = Short->next;
	}
	ListNode *Fnode = Long;

	return Fnode;
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值