我只能记住大概,如果有纰漏,再修改。
1.看程序写返回值,并说明原因。
int foo(int n)
{
static int i=1;
n=n+i;
i++;
if(n<5)
n=n+foo(n);
return n;
}
foo(1);
分析: i是静态变量,只会被赋值一次,然后被foo函数共有,然后就是计算递归的值,答案是13.
2. counter=5
A.counter++;
B.counter--;
AB分别属于两个进程,求counter可能的结果。
分析:可能是4 5 6
A读 B读 A写 B写 是4
A读 A写 B读 B写 是5
A读 B读 B写 A写 是6
编程题
1.长度不超过1000的数组,有若干0,把这些0提前,其他元素相对位置不变,例子
{4,0,1,0,2,,3,6,0,5}->{0,0,0,4,1,2,3,6,5}
空间复杂度是O(1) 时间复杂度尽可能低
分析:分三步
1.统计0的个数。
2.从后移位。
3.填充前面的0.
空间复杂度是O(1) 时间复杂度是O(n)
2.在一个无向图中,给定一个节点,如包含该节点的最小环。如果没有这样的环,返回0。
例如下图,给定2,返回0 给定3 返回 3 ,4,6,5 给定6,返回6,7,8
不会。凑