南京三星面试准备3--数组&基础数据结构
1、用递归颠倒一个栈。
void PushToBottom(stack<int> &mystack,int num){if(mystack.size()==0){mystack.push(num);return;}int temp=mystack.top();mystack.pop();PushToBottom(mystack,num);mystack.push(temp);}void Reverse(stack<int> &mystack){if(mystack.size()==1)return;int temp=mystack.top();mystack.pop();Reverse(mystack);PushToBottom(mystack,temp);}递归的关键点:1、必须定义一个终止条件;否则函数会永远递归下去,直到栈空间耗尽。所以,递归函数一般都用类似if语句来判断终止条件,如果条件成立则继续调用,否则函数结束调用,开始返回。
2、找到本级函数和下一级函数的等价条件。
(1).对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)
某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。
(2).一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值为3