剑指offer例题分享--6
前言:继续整理例题,快速做完这部分,然后继续用C++去刷数据结构和算法的题。
面试题28:

代码如下:
#include<iostream>
#include<stdio.h>
using namespace std; void Permutation(char *pStr,char *pBegin)
{
if(*pBegin == '\0')
{
printf("str:%s\n",pStr);
}
else
{
for(char *pCh=pBegin;*pCh!='\0';++pCh)
{
char temp = *pCh;
*pCh = *pBegin;
*pBegin = temp; Permutation(pStr,pBegin+); temp = *pCh;
*pCh = *pBegin;
*pBegin = temp;
}
}
} void Permutation(char *pStr)
{
if(pStr == NULL)
return; Permutation(pStr,pStr);
} int main()
{
char buf[]="asd";
Permutation(buf);
return ;
}
面试题29:

代码如下:
/*************************************************************************
> File Name: 29.cpp
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: Tue 14 Aug 2018 09:45:42 AM CST
************************************************************************/ #include<iostream>
using namespace std; bool g_bInputInvalid =false; bool CheckInvalidArray(int *numbers,int len)
{
if(numbers==NULL && len<=)
g_bInputInvalid = true; return g_bInputInvalid;
} bool CheckMoreThanHalf(int *numbers,int len,int num)
{
int times = ;
for(int i=;i<len;++i)
{
if(numbers[i] == num)
times++;
} bool isMoreThanHalf = true;
if(times* < len)
{
g_bInputInvalid = true;
isMoreThanHalf = false;
} return isMoreThanHalf;
} int MoreThanHalfNum(int *numbers,int len)
{
if(CheckInvalidArray(numbers,len))
return ; int result = numbers[];
int times = ;
for(int i=;i<len;++i)
{
if(times == )
{
result = numbers[i];
times = ;
}
else if(numbers[i] == result)
times++;
else
times--;
} if(!CheckMoreThanHalf(numbers,len,result))
result = ;
return result;
} int main()
{
int data[]={,,,,,,};
cout << "num: " << MoreThanHalfNum(data,) << endl;; return ;
}
面试题30:
分析:一定要对C++的STL熟悉,才能看明白如下代码:
#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std; //greater<int>()是一个预定义函数对象,将multiset容器从大到小排序
typedef multiset<int,greater<int> > intSet;
typedef multiset<int,greater<int> >::iterator setIterator; void GetLeastNumbers(const vector<int> &data,intSet &leastNumbers,int k)
{
//清空容器
leastNumbers.clear(); if(k< || data.size()<k)
return; //创建迭代器
vector<int>::const_iterator iter = data.begin();
for(;iter!=data.end();++iter)
{
//小于k插入容器
if((leastNumbers.size())<k)
leastNumbers.insert(*iter);
else{
setIterator iteraCreatest = leastNumbers.begin();
//如果插入的数比容器中的最大值小,则删除
if(*iter < *(leastNumbers.begin()))
{
leastNumbers.erase(iteraCreatest);
leastNumbers.insert(*iter);
}
}
}
} int main()
{
vector<int> data();
data[] = ;
data[] = ;
data[] = ;
data[] = ;
intSet set;
GetLeastNumbers(data,set,);
//iterate over all elements and print them
intSet::iterator pos;
for (pos = set.begin(); pos != set.end(); ++pos) {
cout << *pos << ' ';
}
cout << endl; return ;
}
剑指offer例题分享--6的更多相关文章
- 剑指offer例题分享--8
前言:继续分享,加油! 面试题44: 代码如下: #include<iostream> #include<stdlib.h> using namespace std; int ...
- 剑指offer例题分享--7
前言:继续前面的分享... 面试题31: 代码如下: #include<iostream> #include<limits.h> using namespace std; bo ...
- 剑指offer例题分享--4
前言:搁置许久的更新要继续开始了!前一段时间一直在忙项目和C++的学习,所以搁置了!要改变注意了,要用C++进行编写了,因为要不断练习C++! 面试题15: 书中要求只能遍历链表一次,所以代码如下: ...
- 剑指offer例题——跳台阶、变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: n<=0时,有0种跳法 n=1时,只有一种跳法 n=2时,有 ...
- 剑指offer 例题
题目: 实现一个排序算法,排序对象是本公司员工的年龄.要求时间复杂度O(n),空间复杂度不能超过O(n). #include<iostream> using namespace std; ...
- 剑指offer例题——反转链表
题目描述 输入一个链表,反转链表,输出新链表的表头 程序编写 将链表反转 public class Solution { public ListNode ReverseList(ListNode he ...
- 剑指offer例题——链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 编程过程 此处采用两个指针依次后移的方法来求解,首先,用一个指针移到第k个位置,之后将第二个指针放在第一位,与第二个指针一同移动,当第二个指针移动 ...
- 剑指offer例题——二进制中1的个数
题目:输入一个整数,输出该二进制表示中1的个数.其中负数用补码表示. 首先明确补码的定义: 原码 反码 补码 将最高位作为符号位(0表示正,1表示负), 其它数字位表达数值本身的绝对值的数字表示方式 ...
- 剑指offer例题——用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 首先是概念理解,栈和对列存取的区别 栈(stack)是一种后进先出(last in first out, LI ...
随机推荐
- shell知识
shell基本的语句 一:if语句 格式: if [ #条件的判断 ];then #执行的动作 fi 操作符 + 加 - 减 * 乘 / 除[取整数商] % 余[取余数] 数值的比较 参数 说明 ...
- 记录mysql安装过程遇到问题
1. 远程连接授权 登陆mysql数据库 (如果安装在系统盘可以直接命令, 否则要切换到安装目录..bin/) mysql -u root -p mysql> use mysql; - ...
- Injection
what java EE提供了注入机制,使您的对象能够获取对资源和其他依赖项的引用,而无需直接实例化它们.通过使用将字段标记为注入点的注释之一来装饰字段或方法,可以在类中声明所需的资源和其他依赖项.然 ...
- Logback简单使用
1. 添加jar包/maven配置 <dependency> <groupId>ch.qos.logback</groupId> <artifactI ...
- 环境搭建文档——Windows下的Python3环境搭建
前言 背景介绍: 自己用Python开发了一些安卓性能自动化测试的脚本, 但是想要运行这些脚本的话, 本地需要Python的环境. 测试组的同事基本都没有安装Python环境, 于是乎, 我就想直接在 ...
- Git使用(二、分支的创建和上传)
介绍使用TortoiseGit创建分支并push到gitlab项目库,转载请注明出处. 一.创建一个新的文件夹,把要待编辑的工程从gitlab上pull到该文件夹. 其中URL从gitlab的对应项目 ...
- MySQL数据库(三)索引总结
一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存. 如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录 ...
- ExtJS中listener方法和handler方法的区别
listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...
- U-Boot Makefile分析(2) config.mk分析
浏览一下U-Boot各个子目录下的Makefile可以看到,几乎他们都会包含$(TOPDIR)/config.mk,那么这个文件进行了什么操作呢?简单概括:读入include/config.mk.in ...
- STM32CubeMX的串口配置,以及驱动代码
1.STM32CubeMX的配置没啥子好说的,使能然后改一下波特率和字长,然后在将中断勾选,把中断等级调到1(一定要比systick的优先级垃圾!!!) 2.驱动代码 在生成的it.c文件中,例如用的 ...