网易笔试过后,心里空空的。下来也和同学们交流,可能大家以为我比较水,在我谈到写那个大数类的时候,直接否认了我的分段加法思想。虽然被否认,但是我却不能懈怠,更不能因此沮丧或者自我否定。我应该在质疑声中证明自己。我也可以,而且8月份为了拿到offer,我开始拼了!
首先说一下选择题吧,我的知识面有所扩展,但是mysql、linux方面的知识欠缺的比较多。设计模式我之前看过专栏:设计模式。但是没总结。TCP/IP协议我也是看了vamei大神的总结,整体理解还算行,但是实现细节就比较欠缺了。
说说编程题吧,幸运的是考前我看到了往年的修学分的题目,和本次的分苹果基本类似。但是下来和大神代码交流的时候还是有不足,在写代码的时候还是要注意很多问题。
#include <iostream>
using namespace std;
int getRt(int *num, int len)
{
int av = 0;
int total = 0;
for (int i = 0; i < len; ++i)
av += num[i];
if (av % len != 0) return -1;
av = av / len;
for (int i = 0; i < len; ++i)
num[i] -= av;
for (int i = 0; i < len; ++i)
{
if (num[i] > 0 && num[i] % 2 == 1)
return -1;
else if (num[i] > 0)
total += num[i];
}
return total / 2;
}
int main()
{
int len = 0;
int *arr = NULL;
cin >> len;
arr = new int[len];
for (int i = 0; i < len; ++i)
cin >> arr[i];
int rt = getRt(arr, len);
cout << rt << endl;
delete arr;
return 0;
}
这段代码的问题在于只能输入一个case。修改为如下即可。
#include <iostream>
#include <vector>
using namespace std;
int GetResult(vector<int> num, int len)
{
int av = 0;
int total = 0;
for (int i = 0; i < len; ++i)
av += num[i];
if (av % len != 0) return -1;
av /= len;
for (int i = 0; i < len; ++i)
num[i] -= av;
for (int i = 0; i < len; ++i)
{
if (num[i] > 0 && num[i] % 2 == 1)
return -1;
if (num[i] > 0)
total += num[i];
}
return total / 2;
}
int main()
{
int len = 0;
while(cin >> len) //便于输入多个case
{
vector<int> data(len,0);
for (int i = 0; i < len; ++i)
{
int temp = 0;
cin >> temp;
data[i] = temp;
}
int rt = GetResult(data, len);
cout << rt << endl;
data.clear();
}
return 0;
}
在输入时加入while()循环,便于输入多个case。同时使用数组转化为vector。再来分析分析下面的代码。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int>v;
int sum=0;
while(n--)
{
int tmp;
cin>>tmp;
v.push_back(tmp);
sum+=tmp;
}
int avg=sum/n;
vector<int>sent;
for(int i=0;i<v.size();i++)
{
if(v[i]-avg>0)sent.push_back(v[i]-avg);
}
int cnt=0;
for(int i=0;i<sent.size();i++)
{
if(sent[i]%2==0)cnt+=sent[i]/2;
else return -1;
}
return cnt;
}
(1)整体的逻辑就是少了如果平均值为小数时,也即不能整除时要直接返回-1。(2)循环输入多个case的情况没有考虑(3)代码结构模糊,没有将相关逻辑运算直接分离出去。(4)算法欠缺优化考虑。
所以此段代码进步空间还是很大。如下进步方向。
1.写代码逻辑分明,能够概括为一个函数最好单独写个函数。
2.输入格式、输出格式需要严格满足要求
3.算法的空间和时间的效率能优化尽量优化。
文章的最后,我发泄下。那位看不起我的同学,你等着,我一定会成为大神的,等着看吧。画风一转,我还是要认清自己的不足,查漏补缺,虚心学习,厚积薄发。