剑指offer例题分享--6

简介:   前言:继续整理例题,快速做完这部分,然后继续用C++去刷数据结构和算法的题。  面试题28:      代码如下:    #include#includeusing namespace std;void Permutation(char *pStr,char *pBegin)...

  前言:继续整理例题,快速做完这部分,然后继续用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+1);

            temp = *pCh;
            *pCh = *pBegin;
            *pBegin = temp;
        }
    }
}

void Permutation(char *pStr)
{
    if(pStr == NULL)
        return;

    Permutation(pStr,pStr);
}

int main()
{
    char buf[32]="asd";
    Permutation(buf);
    return 0;
}

  面试题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<=0)
        g_bInputInvalid = true;

    return g_bInputInvalid;
}

bool CheckMoreThanHalf(int *numbers,int len,int num)
{
    int times = 0;
    for(int i=0;i<len;++i)
    {
        if(numbers[i] == num)
            times++;
    }

    bool isMoreThanHalf = true;
    if(times*2 < len)
    {
        g_bInputInvalid = true;
        isMoreThanHalf = false;
    }

    return isMoreThanHalf;
}

int MoreThanHalfNum(int *numbers,int len)
{
    if(CheckInvalidArray(numbers,len))
        return 0;

    int result = numbers[0];
    int times = 1;
    for(int i=1;i<len;++i)
    {
        if(times == 0)
        {
            result = numbers[i];
            times = 1;
        }
        else if(numbers[i] == result)
            times++;
        else
            times--;
    }

    if(!CheckMoreThanHalf(numbers,len,result))
        result = 0;
    return result;
}

int main()
{
    int data[]={1,2,5,6,2,2,2};
    cout << "num: " << MoreThanHalfNum(data,7) << endl;;
    
    return 0;
}

  面试题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<1 || 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(4);
    data[0] = 1;
    data[1] = 8;
    data[2] = 9;
    data[3] = 2;
    intSet set;
    GetLeastNumbers(data,set,2);
    //iterate over all elements and print them
     intSet::iterator pos;
     for (pos = set.begin(); pos != set.end(); ++pos) {
     cout << *pos << ' ';
     }
     cout << endl;
    
    return 0;
}

 

作者: 柳德维

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ⁾⁾!

目录
相关文章
|
12月前
|
安全 调度 开发者
探索操作系统的心脏:现代内核架构与挑战
【10月更文挑战第7天】 本文深入探讨了现代操作系统内核的复杂性和功能性,从微观角度剖析了内核在系统运行中的核心作用及其面临的主要技术挑战。通过浅显易懂的语言解释专业概念,旨在为读者提供一个关于操作系统内核的全面视角。
162 2
|
数据库
达梦数据库最大连接数处理
达梦数据库最大连接数处理
352 0
|
11月前
|
存储 缓存 监控
网站的图片资源是否需要设置缓存?
【10月更文挑战第18天】网站的图片资源一般是需要设置缓存的,但要根据图片的具体特点和网站的需求,合理设置缓存时间和缓存策略,在提高网站性能和用户体验的同时,确保用户能够获取到准确、及时的图片信息。
|
存储 SQL 关系型数据库
在MySQL中使用存储过程返回更新前的记录
在MySQL中使用存储过程返回更新前的记录
263 0
|
Shell Linux
高级用法查询指定进程使用到的环境变量
查询指定进程使用到的环境变量
|
敏捷开发 人工智能 Devops
开发必备:2024年整理10款超级好用的项目管理工具
整理10款适合企业研发团队使用的项目管理工具,包括(排名不分先后): 1.PingCode 智能化研发管理工具;2.Ones 大型企业研发管理平台;3.YesDev 研发项目协同管理工具;4.Teambition 阿里巴巴旗下团队协作工具;5.Jira Atlassian公司出品的项目与事务跟踪工具;6.Tower 专注50人以下团队的任务协作 ;7.TAPD 由腾讯出品的一站式敏捷研发协作云平台;8.码云Gitee DevOps一站式研发效能平台;9.禅道 国产开源的项目管理软件;10.Momday 由以色列提供的全新工作平台,内含项目管理模块。
|
SQL 机器学习/深度学习 网络协议
撰写一组SNORT规则防御SQL注入
http://bbs.chinaunix.net/viewthread.php?tid=1211897 修改错误的地方:load_file()这里应该是 (/%3D|=)+(/S|/s)+((...
1670 0
|
网络协议 Dubbo 应用服务中间件
基于内存通信的gRPC调用
通过内存调用gRPC服务
基于内存通信的gRPC调用
|
弹性计算 Linux 容器
阿里云ECS使用体验
通过“飞天加速计划·高校学生在家实践”申领了两周免费ESC服务器,阿里云ECS,yyds。