开学回来后的第一次总结,说一说自己这两天的收获。
1. next_permutation();能按字典序返回不同组合。
如a,b,c返回abc acb…函数主要用于寻找符合不同标准的序列。这样的函数,降低了函数的复杂程度(o(n))给定序列要求就可求出要求序列。
这些天java的学习也复习了递归函数。递归函数就是在函数里调用函数,这样极大的缩减了程序运行时间。可能就由on2到了on。重新做了求斐波那契函数,求n的阶乘。
3.并查集写一个看的例子说说我的理解how many tablesn个人一起吃饭,有人互相认识,一起坐。不认识的单独坐,求用多少桌子
主要用到三个函数,初始化,查找,合并。
初始化:每个人都只属于一个集,再根据是否认识再合并,所以先初始化。
for (int i=1;i<=maxn;i++) s[i]=i;
查找:int find(int x){return x==s[x]?x:find_set(s[x]);}判断是否认识,如果认识则合并一个集合并:如果认识则合并void union_set(){x=find_set(x);y=find_set(y);if(x!=y)s[x]=s[y];}
最后统计一共合并了多少集即需要多少桌子。
做了个一以前的题,输入n,输出n个()组成的字符串,保证()都是包裹的不存在)(这种形式所以每次输出时,需要保证按一定顺序输出,在每次形式改变时,输出结果后,要再将形式复原。这个题难度不大,但要保证if条件的准确,逻辑合理。



