【C++刷题】经典简单题第二辑

news2025/1/24 11:30:43
  1. 回文排列
    在这里插入图片描述
class Solution 
{
public:
    bool canPermutePalindrome(string s) 
    {
    	// 记录字符出现的次数
        int count[256] = {0};
        for(size_t i = 0; i < s.size(); ++i)
            ++count[s[i]];

		// 记录字符出现次数为奇数的个数
        int flag = 0;
        for(size_t i = 0; i < 256; ++i)
            if(count[i] % 2 == 1)
                ++flag;
		
        if(flag > 1)
            return false;
        return true;
    }
};
  1. URL化
    在这里插入图片描述
class Solution 
{
public:
    string replaceSpaces(string S, int length) 
    {
        int front = length - 1;
        int back = front;
        // 遍历找出空格个数
        for(int i = 0; i < length; ++i)
        {
            if(S[i] == ' ')
            {
                back += 2;
            }
        }
        // 实际URL化后所需的空间大小
        S.resize(back + 1);
		
        while(front != back)
        {
            if(S[front] != ' ')
            {
                S[back--] = S[front];
            }
            else
            {
                S[back--] = '0';
                S[back--] = '2';
                S[back--] = '%';
            }
            --front;
        }
       
        return S;
    }
};
  1. 配对交换
    在这里插入图片描述
class Solution {
public:
    int exchangeBits(int num) 
    {
        int num1 = 0b01010101010101010101010101010101;
        int num2 = 0b10101010101010101010101010101010;
        // 获取奇数位
        num1 &= num;
        // 获取偶数位
        num2 &= num;

        return (num1 << 1) + (num2 >> 1);
    }
};
  1. 递归乘法
    在这里插入图片描述
class Solution
{
public:
	// A * B = A + A * (B - 1) = A + A + A * (B - 2) = ....
    int multiply(int A, int B)
    {
        if(B == 0)
            return 0;
        if(B == 1)
            return A;
        return A + multiply(A, B - 1);
    }
};
  1. 阶乘尾数
    在这里插入图片描述
/*
* 尾数0是乘10来的,10是从2*5来的
* [1,n]中因子5相对2会少些,找出[1,n]中因子5的个数,就是尾数0的个数
*/
class Solution 
{
public:
    int trailingZeroes(int n) 
    {
        int count = 0;
        while(n >= 5)
        {
            n /= 5;
            count += n;
        }

        return count;
    }
};
  1. 二进制链表转整数
    在这里插入图片描述
    在这里插入图片描述
class Solution
{
public:
    int getDecimalValue(ListNode* head) 
    {
        int num = 0;
        while(head != NULL)
        {
            num = (num << 1) + head->val;
            head = head->next;
        }

        return num;
    }
};
  1. 从链表中删去总和值为零的连续节点
    在这里插入图片描述
class Solution {
public:
    ListNode* removeZeroSumSublists(ListNode* head)
    {
        ListNode* newhead = new ListNode;
        newhead->next = head;

        ListNode* front = newhead;
        while (front)
        {
            int sum = 0;
            ListNode* back = front->next;
            while (back)
            {
                sum += back->val;
                if (sum == 0)
                {
                    ListNode* del = front->next;
                    back = back->next;
                    while (del != back)
                    {
                        ListNode* tmp = del;
                        del = del->next;
                        // delete tmp;
                    }
                    front->next = back;
                }
                else
                {
                    back = back->next;
                }
            }
            front = front->next;
        }

        head = newhead->next;
        delete newhead;
        return head;
    }
};
  1. 括号的最大嵌套深度
    在这里插入图片描述
class Solution {
public:
    int maxDepth(string s)
    {
        int count = 0; // 记录当前深度
        int depth = 0; // 记录最深度

        for (char c : s)
        {
            if (c == '(')
            {
                ++count;
                if(count > depth)
                {
                    ++depth;
                }
            }
            else if (c == ')')
            {
                --count;
            }
        }
        return depth;
    }
};
  1. 整理字符串
    在这里插入图片描述
    在这里插入图片描述
class Solution {
public:
    string makeGood(string s) 
    {
        size_t i = 0;
        while(s.size() > 0 && i < s.size() - 1)
        {
            if(abs(s[i] - s[i+1]) == 32)
            {
                s.erase(i, 2);
                if(i > 0)
                {
                    --i;
				}
                continue;
            }
            ++i;
        }
        return s;
    }
};
  1. 奇偶树
    在这里插入图片描述
    在这里插入图片描述
class Solution {
public:
    bool isEvenOddTree(TreeNode* root)
    {
        queue<TreeNode*> q;
        q.push(root);
        if((q.front()->val) % 2 == 0)
        {
            return false;
        }

        int level = 0;
        int num = 1;
        while(!q.empty())
        {
        	// v用于存储一层节点数据用于比较判断
            vector<int> v;
            while(num--)
            {
                if(q.front()->left)
                {
                    q.push(q.front()->left);
                    v.push_back(q.back()->val);
                }
                if(q.front()->right)
                {
                    q.push(q.front()->right);
                    v.push_back(q.back()->val);
                }

                q.pop();
            }
            ++level;
            num = v.size();
            
            if(!v.empty())
            {
                if(level % 2) // level 是奇
                {
                    int prev = v[0];
                    if(prev % 2 == 1)
                    {
                        return false;
                    }
                    for(size_t i = 1; i < v.size(); ++i)
                    {
                        if((v[i] % 2 != 0) || prev <= v[i])
                        {
                            return false;
                        }
                        prev = v[i];
                    }
                }
                else // level 是偶
                {
                    int prev = v[0];
                    if(prev % 2 == 0)
                    {
                        return false;
                    }
                    for(size_t i = 1; i < v.size(); ++i)
                    {
                        if((v[i] % 2 != 1) ||  prev >= v[i])
                        {
                            return false;
                        }
                        prev = v[i];
                    }
                }          
            }
        }    
        return true;
    }
};
  1. 将句子排序
    在这里插入图片描述
    在这里插入图片描述
class Solution {
public:
    string sortSentence(string s)
    {
        vector<string> vs;
        vs.resize(9);
        // 倒序遍历,找数字
        for(int i = s.size() - 1; i >= 0; --i)
        {
            if(s[i] >= '0' && s[i] <= '9')
            {
                int j = i - 1;
                while(j >= 0 && s[j] != ' ')
                {
                    --j;
                }
                // 将对应编号的数字对应的字符串,放入数组
                vs[s[i] - '0' - 1] += string(s.begin() + j + 1, s.begin() + i);
                i = j;
            }
        }
		
		// 拼接到vs[0]
        for(size_t i = 1; i < 9; ++i)
        {
            if(vs[i].size() > 0)
            {
                vs[0] += (' ' + vs[i]);
            }
        }
        return vs[0];
    }
};
  1. 最长和谐子序列
    在这里插入图片描述
    在这里插入图片描述
class Solution {
public:
    int findLHS(vector<int>& nums)
    {
        map<int, int> m;
        // 去重 + 排序
        for (int e : nums)
        {
            m[e]++;
        }

        auto it = m.begin();
        auto prev = it;
        ++it;
        int max = 0;
        while (it != m.end())
        {
            if ((it->first - prev->first == 1) && (prev->second + it->second > max))
            {
                max = prev->second + it->second;
            }
            prev = it;
            ++it;
        }
        return max;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/996118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript作用域链与预解析

查找上一级 JavaScript的预解析 js解析器在运行js代码时会先进行预解析,再进行代码的执行 预解析时js引擎会把js里面所有的var还有function提升到当前作用域的最前面 代码执行,按照代码书写的顺序从上往下执行 预解析分为变量预解析(变量提升)与函数预解析(函数提升) 1.变量…

优秀的 Modbus 主站(主机、客户端)仿真器、串口调试工具

文章目录 优秀的 Modbus 主站&#xff08;主机、客户端&#xff09;仿真器、串口调试工具主要功能软件截图 优秀的 Modbus 主站&#xff08;主机、客户端&#xff09;仿真器、串口调试工具 modbus master,modbus,串口,工控,物联网,PLC,嵌入式 官网下载地址&#xff1a;http:/…

七)Stable Diffussion使用教程:附加功能

图生图右侧有个附加功能选项,里面其实也存在一个图片放大(缩放)功能,而且因为它不涉及重绘的过程,所以不需要任何提示词,适用于任何图片(包括非 SD 生成的图片)。 原理:在拉伸放大的基础上适当对色块和线条的边缘做了模糊处理,和其他工具的放大原理类似。 观察界面…

【LeetCode-中等题】367. 有效的完全平方数

文章目录 题目方法一&#xff1a;二分查找 题目 方法一&#xff1a;二分查找 找 1 - num 之间的 mid&#xff0c; 开方是整数 就找得到 mid&#xff0c; 不是整数自然找不到mid class Solution { // 二分查找 &#xff1b;找 1 - num 之间的mid 开方是整数 就找得到 不是…

python超详细安装

目录 初始python获取python安装包python解释器安装pycharm编译器安装pycharm的简单使用&#xff08;第一个hello world&#xff09; 初始python Python 是一款易于学习且功能强大的编程语言。 它具有高效率的数据结构&#xff0c;能够简单又有效地实现面向对象编程。 Python简…

平衡二叉搜索树(AVL)——【C++实现插入、删除等操作】

本章完整代码gitee地址&#xff1a;平衡二叉搜索树 文章目录 &#x1f333;0. 前言&#x1f332;1. AVL树概念&#x1f334;2. 实现AVL树&#x1f33f;2.1 结构定义&#x1f33f;2.2 插入&#x1f490;左单旋&#x1f490;右单旋&#x1f490;左右双旋&#x1f490;右左双旋 &a…

c++day1

练习&#xff1a;使用cout完成输出斐波那契前20项的内容 1 1 2 3 5 8 13.。。。 #include <iostream> using namespace std;int main() {int a[20]{1,1};for(int i2;i<20;i){a[i]a[i-1]a[i-2];}for(int i0;i<20;i){cout<<a[i]<<" ";}retur…

javascript【格式化时间日期】

javascript【格式化时间日期】 操作&#xff1a; (1) 日期格式化代码 /*** 日期格式化函数<br/>* 调用格式&#xff1a;需要使用日期对象调用* <p> new Date().Format("yyyy/MM/dd HH:mm:ss"); </p>* param fmt 日期格式* returns {*} 返回格式化…

易优cms响应式月嫂家政服务公司网站模板源码—自适应手机端设计,支持后台管理

易优cms响应式月嫂家政服务公司网站模板源码 自适应手机端 带后台 模板基于EyouCMS内核制作,模板编码为UTF8 ,适合行业:家政服务类企业。 模板信息&#xff1a; 模板分类&#xff1a;摄像、婚庆、家政、保洁 适合行业&#xff1a;家政服务类企业 模板介绍&#xff1a; 本模…

龙蜥Anolis 8.8 安装MySQL

一、安装参考文档 官方文档&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html#yum-repo-installing-mysql出问题时的文档&#xff1a;https://blog.csdn.net/weixin_44798320/article/details/123446249 二、安装过程 2.1 下载官方的镜…

RocketMQ入门之学习环境搭建

文章目录 0.前言1.使用docker 方式搭建RocketMQ学习环境启动NameServer和 启动Broker常见报错 2.使用源码安装方式3. 常见问题3. 参考文档 0.前言 在学习RocketMQ 需要先自行搭建一个RocketMQ 服务端。本节我们先来搭建一个简单的学习环境。下个章节&#xff0c;我们写个简单的…

一起学数据结构(5)——栈和队列

1. 栈的相关定义及特点&#xff1a; 1. 栈的相关定义&#xff1a; 在正式介绍栈的定义之前&#xff0c;首先来回顾一下关于线性表的定义&#xff1a; 线性表是具有相同数据类型的个数据元素的有限序列&#xff0c;其中为表长。当时&#xff0c;可以把线性表看作一个空表&…

图床项目进度(三)——文件展示页

前言 该项目作为一个类网盘项目&#xff0c;主要包括上传下载&#xff0c;引用&#xff0c;预览等功能。 大致功能&#xff1a; 图片预览 这里的图片预览我使用的一个插件 const state: any reactive({ image: https://pic35.photophoto.cn/20150511/0034034892281415_b…

悲观锁和乐观锁、缓存

悲观锁&#xff1a; 悲观锁的实现通常依赖于数据库提供的机制&#xff0c;在整个处理的过程中数据处于锁定状态&#xff0c;session的load方法有一个重载方法&#xff0c;该重载方法的第三个参数可以设置锁模式&#xff0c;load(object.class , int id,LockMode.?)&#xff0…

deepin 如何卸载软件

文章目录 卸载软件&#xff08;正文&#xff09; 通常来讲在官方的应用商场卸载即可。 但是呢&#xff1f; 很不幸的是&#xff0c;没能够彻底删除软件。还是能够在启动器界面上看到应用。 这时候&#xff0c;你右键卸载&#xff0c;会提示“卸载失败”。如下图&#xff1a; …

VirtualBox RockyLinux9 网络连接

有几次都是隔一段时间之后启动虚拟机&#xff0c;用第三方ssh工具就连接不上了。 简单记录一下。 1、VirtualBox设置 2、IP设置 cd /etc/NetworkManager/system-connections/ vim enp0s3.nmconnection[connection] idenp0s3 uuid9c404b41-4636-397c-8feb-5c2ed38ef404 typeet…

windows nvm 安装 以及常用的命令

1 nvm 下载 链接&#xff1a;https://github.com/coreybutler/nvm-windows/releases 可下载以下版本&#xff1a; nvm-noinstall.zip&#xff1a;绿色免安装版&#xff0c;但使用时需要进行配置。 nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 2 安装&#xff08…

python-38-python定时任务框架

Python定时任务 Python任务调度模块 – APScheduler python调度框架APScheduler使用详解 APScheduler动态增、删、改任务 apscheduler mysql 持久化任务 APScheduler调度框架 在项目中&#xff0c;我们可能遇到有定时任务的需求。 其一&#xff1a;定时执行任务。例如每天早上 …

为什么要学习源码之Java篇

为什么学习源码 大厂面试必问。二次开发。提升代码阅读能力&#xff0c;更能输出优质代码。提升技术功底。拥抱开源社区。快速定位线上问题。 学习源码的方式 首先最重要的是学会使用。具有全局观。先对大致有个细节的了解&#xff0c;一开始不要太关注于细节。学会看注释&a…

【计算机网络】TCP传输控制协议——三次握手

文章目录 握手的流程常考考点 握手的流程 一开始&#xff0c;客户端和服务端都处于CLOSE状态&#xff0c;先是服务端监听某个端口&#xff0c;处于LISTEN状态。然后客户端主动发起连接SYN&#xff0c;之后处于SYN-SEND状态。服务端收到发起的连接&#xff0c;返回SYN&#xff0…