算法部分
做的是485 Max Consecutive Ones,算是很简单的题目,一次线性扫描,一个变量记录由0至1的翻转,两个变量记录当前max序列长度和当前序列长度,一个记录位置的变量。很容易就写出来了。
#define MAX(a,b) a>b?a:b
int findMaxConsecutiveOnes(int* nums, int numsSize) {
int* end = nums + numsSize;
int swap = 0;
int cur_len=0;
int max_len=0;
while(nums < end)
{
if (*nums)
{
cur_len++;
swap = 1;
}
if( *nums == 0 && swap == 1)
{
max_len = MAX(max_len, cur_len); // save the larger one compare with previous larger one
cur_len = 0; // reset current len
swap = 0;
}
nums++;
}
return MAX(max_len, cur_len);
}
其实我有考虑过算法部分是否需要停一下,因为自己稍微复杂一些的数据结构都有些不清楚,比如二叉树和红黑树等等。还是需要好好地补习一番。
Review部分
本周还是还在继续看csapp第四章处理器流水线的原理。同时也完成了coursera:build-a-computer的第二周课程作业。时间还是挺紧张的。作业里面用电路的原理来实现加法还是蛮有意思的,正好也和csapp的第二章呼应起来。使用two's complement,就使得有符号数和无符号数的算术运算在位级上的操作完全一致。只是最后context不同,表示的实际数也不同。
Tip部分
空。
Share部分
一点点肺腑之言。
我其实目前没有从事软件开发岗位,而是运营。这周有和大学同学吃了个饭,有些感慨职业的路径发展。我的同学毕业进了银行后台部门,平台好,起点高,领导也给力,所以目前工作几年一直舍不得跳槽。但是我没有什么很清晰的目标,一直比较迷糊,以前迷糊到不知道自己不知道。目前我所在的公司也算是业内的大公司,但是岗位本身没有任何发展空间,而且约束也较多。
随着今年budget似乎呈削减的趋势,公司也莫名以各种KPI卡人,然后离职的小伙伴一茬接一茬,甚至包括呆了7年的主管(裸辞)。我才忽然对“人的努力固然重要,也要考虑历史的进程”这话有了点切身的感受,历史的进程替换成平台就没有异议了。我这位同学并不是大学期间学习非常瞩目的那种,但做事认真踏实。工作所提供的良好平台和网络很好地放大了自身的优势。虽然我对于我现在的工作定位就是以廉价的薪水换取稳定的业余时间,但是8小时之外的成长因工作而精力有限,八小时之内的成长几乎为0,即使不从长远看来,我也不该以如此廉价的方式出售我的时间,并压缩了未来的发展。因此如果现在有更好的机会我也会去,如果没有,可能考虑裸辞一段时间夯实基础然后直接转行。