摘要:
题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序解:其实这题主要是判断进栈次数和出栈次数誓不是相等。我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此,所以最多进行2n次操作,然后每次对栈顶元素和pb指针指向的元素进行比较(因为假设序列中整数都不相等)代码:/* 判断栈push和pop顺序是否符合 push中的元素顺序入栈,如果等于pb指向的元素,那么循环出栈,知道栈空或者pb元素和栈顶元素不一样,如果一样,出栈且pb++,总共的入栈出栈次数最多是2*n次 */#includeusing namespace std;#define... 阅读全文
摘要:
面试宝典上的题目,是位运算中的与(&)的体现代码:/* 考察整数2进制数的1的个数 面试宝典问题,用x | (x-1)?? */#includeusing namespace std;int count(int n){ int count=0; while(n!=0) { n=n & (n-1); count++; } return count;}int main(void){ int n; cin>>n; cout<<count(n)<<endl; return 0;} 阅读全文
摘要:
题目: 一个台阶共有n级,如果1此可以跳1级,也可以跳2级,求一共有多少种跳法,并分析时间复杂度解:这其实是斐波那契数列问题 当n=1时,只能跳1级,1种跳法 即f(1)=1 当n=2时,可以1级1级跳,或者1次跳2级,共2种跳法 ,即f(2)=2 当n>2时,开始跳1级的话,那么跳法和f(n-1)一样,开始跳2级的话,跳法和f(n-2)一样,所以有f(n-1)+f(n-2)种跳法 所以 f(n)=1,n=1 f(n)=2,n=2 f(n)=f(n-1)+f(n-2) n>2 阅读全文
摘要:
题目:定义字符串的左旋转操作,把字符串前面的若干个字符移动到字符串的尾部解:1.最笨的一种方法就是,每次将字符串左移1个位置,然后把最左边的字符放到最后,这样移动满次数就行,假设字符串长度是n,要移动前面m个字符(m#include#include#includeusing namespace std;/* 第一种 这个时间是O(kn),空间是O(1) */void leftreverse(string& str,int k){ int i=0; while(i(strlen(str)); if(length>0 && k>0 && k> 阅读全文
摘要:
这个没什么技巧,遍历,如果1个字符是数字符的话,那么以它为起点遍历,寻找以它为起点的连续的数字串的长度,下一次起点是这个连续字符串的下一个位置,保存1个最大长度和一个指向最长连续数字串的指针/* 求字符串中连续最长的数组串 */#include#includeusing namespace std;#define MAX 100int continumax(char* outputstr,char* inputstr){ char* p=inputstr; char* q=NULL; char* k=NULL; int length=0; whil... 阅读全文
摘要:
/* 单链表的就地逆制 */#includeusing namespace std;typedef struct node{ int value; struct node* next;}Node;//头指针Node* head=NULL;void reverse(){ Node *p,*q; p=head; head=NULL; while(p!=NULL) { q=p; p=p->next; //把q插自head之前 q->next=head; head=q; } ... 阅读全文