1. 有2个长度为N的无序数组, A跟C。
当长度为N时,交换2个数组里面的一些值。 让数组A的总和 减去 C的总和,(或者是反过来也行) 达到一个最小差值, 这个差值将导致2个数组无法继续交换数据产生更小的差值。
解释:数组A里面的所有元素相加后得到的总和(溢出是个问题) 减去数组B里面的所有元素相加的总和, 得出来的数值, 是2数组无法再次交换数据相减得出的最小差值。
2. 用两个栈实现一个队列的功能?请给出算法和思路
参考:设2个栈为A,B, 一开始均为空. 入队: 将新元素push入栈A; 出队: (1)判断栈B是否为空; (2)如果不为空,则将栈A中所有元素依次pop出并push到栈B; (3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好。
3. 用C语言写一个递归算法求N!
4. 用代码实现选首领(有一群人围在一圈,从第一个人开始数1、2、3,数到3者退出,用循环链表实现)、
5. 字符串匹配问题(int countABC(* s) 输入任何一串字符串,计算机其中有连续ABC子字符串的个数 )