名企招聘经典面试编程题集锦[第21-30题]
来源:互联网 发布:js对象转换成字符串 编辑:程序博客网 时间:2024/09/21 09:18
定义一个函数,输入一个链表的结点,反转该链表并输出反转后链表的头结点。
listNode* ReverseList(listNode* head){if(head==NULL)return NULL;listNode* first = NULL;listNode* second = head;head = head->next;while (second!=NULL){second->next = first;first = second;second = head;if(head!=NULL)head = head->next;}return first;}
22、寻找最长数字串
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,
outputstr所指的值为123456789
int continumax(char *outputstr,char *intputstr){if(outputstr==NULL || intputstr==NULL || *intputstr=='\0')return -1;char* start = NULL;int length = 0;char* startHelper = NULL;int lengthHelper = 0;for (char* ch = intputstr;*ch!='\0';++ch){if(*ch<='9' && *ch >='0'){if(startHelper==NULL)startHelper = ch;++lengthHelper;}else{if(lengthHelper>length){start = startHelper;length = lengthHelper;}startHelper = NULL;lengthHelper = 0;}}if(start!=NULL){int i = 0;for(;i!=length;++i)*(outputstr+i) = *(start+i);*(outputstr+i)='\0';return length;}elsereturn -1;}
23、左旋转字符串
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
void Reverse(char* first,char* last){if(first==NULL || last==NULL || first-last>0)return;while (first<last){char temp = *first;*first++ = *last;*last-- = temp;}}void LeftRotate(char* str,int n){if(str == NULL || n<1)return;char* first = str;char* last =str;while(*last!='\0')++last;--last;Reverse(first,last);last-=n;Reverse(first,last);first=last+1;last+=n;Reverse(first,last);}
24、整数的二进制表示中1的个数
输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
int SumOfOne(int n){int k = 1;int ret =0 ;for (int i = 0; i!=32;++i){if(k&n)++ret;k=k<<1;}return ret;}//更棒的解法int SumOfOne(int n){int ret = 0;while (n){++ret;n = n & (n-1);}return ret;}
25、和为n的连续正数序列
输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
分析:这是网易的一道面试题。
void FindContinuousSequence(int num){if(num<3)return;int start = 1;int end = 2;int sum = start + end;while (start!=end){if(sum<num){++end;sum+=end;}else if(sum>num){sum-=start;++start;}else{int temp = start;while(temp<=end)cout<<temp++<<" ";cout<<endl;++end;sum+=end;}}}
26、字符串的排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串
abc、acb、bac、bca、cab和cba。
分析:这是一道很好的考查对递归理解的编程题,
因此在过去一年中频繁出现在各大公司的面试、笔试题中。
void Permutation(char* str,char* begin);void Permutation(char* str){if(str == NULL)return;Permutation(str,str);}void Permutation(char* str,char* begin){if(*begin == '\0')cout<<str<<" ";for (char* ch = begin ; *ch!='\0';++ch){char temp = *begin;*begin = *ch;*ch = temp;Permutation(str,begin+1);temp = *begin;*begin = *ch;*ch = temp;}}
27、调整数组顺序使奇数位于偶数前面
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,
所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
void OddBeforeEven(int* data,int length){if(data == NULL || length <1)return;int* start = data;int* end = data+length-1;while (start<end){while(*start & 1)++start;while(!(*end & 1))--end;if(start<end){int temp = *start;*start = *end;*end = temp;}}}
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString& str);
private:
char* m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。
CMyString& CMyString::operator =(const CMyString& str){if (this != &str){CMyString tempStr(str);char* temp = tempStr.m_pData;tempStr.m_pData = m_pData;m_pData = temp;}return *this;}
29、用两个栈实现队列
用两个栈实现一个队列,队列声明如下,请实现它的两个函数appendTail和deleteHead,
分别完成在队列尾部插入结点和在队列头部删除结点的功能。
template<typename T> class MyQueue{public:MyQueue(){}~MyQueue(){}void appendTail(const T&);T deleteHead();private:stack<T>stack1;stack<T>stack2;};template<typename T> MyQueue<T>::appendTail(const T& data){stack1.push(data);}template<typename T> T MyQueue<T>::deleteHead(){if(stack2.empty()){if(stack1.empty())throw exception("queue is empty!");else{while(!stack1.empty()){stack2.push(stack1.top());stack1.pop();}}}T ret = stack2.top();stack2.pop();return ret;}
30、从尾到头输出链表
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。
//如果可以修改链表,则先反转链表,再逐个输出;如果不可以,则借助于栈。void PrintFromTailToHead(listNode* head){if(head==NULL)return;stack<listNode*> helper;while(head!=NULL){helper.push(head);head = head->next;}while (!helper.empty()){cout<<helper.top()->value<<" ";helper.pop();}cout<<endl;}
欢迎大家访问我的独立技术博客 道合|SameIdeal.com
- 名企招聘经典面试编程题集锦[第21-30题]
- 名企招聘经典面试编程题集锦[第1-10题]
- 名企招聘经典面试编程题集锦[第11-20题]
- 名企招聘经典面试编程题集锦[第31-40题]
- 名企招聘经典面试编程题集锦[第41-50题]
- 名企招聘经典面试编程题集锦[第51-60题]
- 名企招聘面试考题集锦
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试
- 《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 名企招聘案例集锦
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 何海涛——《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 何海涛——《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
- OpenStack Nova存储管理聪明做法
- 求最短路径算法之Floyd算法
- 【原创】商论之:幼儿园的思维和学前班的做法!
- (APUE点滴记录) 进程控制之fork与vfork
- UVa10405 - Longest Common Subsequence ( 最长公共子序列 )
- 名企招聘经典面试编程题集锦[第21-30题]
- 我的大学十年——林锐
- linux下discuz 论坛安装
- 消息映射和命令传递
- 题目1:排序
- sizeof() && 数组名和指针
- 工厂模式
- php解决用base64_decode解密的时候,出现乱码
- net反射详解(反射篇章导读)