AI刷题-异或编码、拼凑单词 chi

embedded/2025/1/11 17:09:10/

目录

一、异或编码

问题描述

测试样例

解题思路: 

问题理解

解题思路

数据结构选择

算法步骤

最终代码: 

运行结果: 

二、拼凑单词 chi 

问题描述

测试样例

 解题思路:

问题理解

数据结构选择

算法步骤

最终代码:

运行结果: 

 


一、异或编码

问题描述

在一个神秘的实验室里,科学家小艾正在研究一种特殊的编码技术。她有一个经过编码的浮动数字序列 a,这个序列是通过对原始数字序列 data 进行相邻元素的按位异或操作得到的。具体而言,对于序列 data 中的每两个相邻元素,都会生成一个新元素:a[i] = data[i] XOR data[i + 1]

现在,小艾获得了编码后的序列 a 以及原始序列 data 的第一个元素 d0。她的目标是利用这些信息解码,恢复出原始的数字序列 data

请帮助小艾找出原始的数字序列 data


测试样例

样例1:

输入:a = [2, 5, 1], d0 = 3
输出:[3, 1, 4, 5]

样例2:

输入:a = [7, 4, 3], d0 = 6
输出:[6, 1, 5, 6]

样例3:

输入:a = [8, 1], d0 = 9
输出:[9, 1, 0]

样例4:

输入:a = [9, 2, 3], d0 = 4
输出:[4, 13, 15, 12]

样例5:

输入:a = [3, 6, 5], d0 = 7
输出:[7, 4, 2, 7]

解题思路: 

问题理解

  1. 编码过程

    • 给定一个原始序列 data,通过相邻元素的按位异或操作生成一个新的序列 a
    • 具体来说,a[i] = data[i] XOR data[i + 1]
  2. 解码过程

    • 现在我们有了编码后的序列 a 和原始序列的第一个元素 d0
    • 目标是恢复出原始的数字序列 data

解题思路

  1. 逆向操作

    • 由于 a[i] = data[i] XOR data[i + 1],我们可以通过逆向操作来恢复 data
    • 具体来说,data[i + 1] = data[i] XOR a[i]
  2. 逐步恢复

    • 从已知的 d0 开始,逐步计算出 data 中的每一个元素。
    • 初始时,data[0] = d0
    • 然后,对于每一个 i,计算 data[i + 1] = data[i] XOR a[i]

数据结构选择

  • 使用一个 vector 来存储恢复后的 data 序列。

算法步骤

  1. 初始化 data 的第一个元素为 d0
  2. 从 a 的第一个元素开始,依次计算 data 中的每一个元素。
  3. 将计算出的 data 元素存储到 vector 中。
  4. 返回恢复后的 data 序列。

最终代码: 

#include <iostream>
#include <vector>
using namespace std;std::vector<int> solution(std::vector<int> a, int d0) {// 初始化 data 序列,第一个元素为 d0std::vector<int> data = {d0};// 逐步恢复 data 序列for (int i = 0; i < a.size(); ++i) {// 计算 data[i + 1] = data[i] XOR a[i]int next_data = data.back() ^ a[i];// 将计算出的 data 元素添加到 vector 中data.push_back(next_data);}// 返回恢复后的 data 序列return data;
}int main() {cout << (solution({2, 5, 1}, 3) == std::vector<int>{3, 1, 4, 5}) << endl;cout << (solution({7, 4, 3}, 6) == std::vector<int>{6, 1, 5, 6}) << endl;cout << (solution({8, 1}, 9) == std::vector<int>{9, 1, 0}) << endl;cout << (solution({9, 2, 3}, 4) == std::vector<int>{4, 13, 15, 12}) << endl;cout << (solution({3, 6, 5}, 7) == std::vector<int>{7, 4, 2, 7}) << endl;return 0;
}

运行结果: 

二、拼凑单词 chi 

问题描述

小C在处理一个字符串问题。给定一个字符串 text,你需要使用 text 中的字母尽可能多地拼凑出单词 "chi"。字符串中的每个字母最多只能被使用一次。你需要返回最多可以拼凑出多少个单词 "chi"


测试样例

样例1:

输入:text = "chiichcc"
输出:2

样例2:

输入:text = "chicchcic"
输出:2

样例3:

输入:text = "cccchhii"
输出:2

 解题思路:

问题理解

你需要从给定的字符串 text 中尽可能多地拼凑出单词 "chi"。每个字母最多只能被使用一次。

数据结构选择

为了有效地统计每个字母的出现次数,我们可以使用一个哈希表(在C++中可以使用 std::unordered_map)来记录每个字母的频率。

算法步骤

  1. 统计字母频率:遍历字符串 text,统计每个字母的出现次数。
  2. 计算最多能拼凑的单词数
    • 单词 "chi" 由字母 'c''h' 和 'i' 组成。
    • 计算每个字母 'c''h' 和 'i' 的出现次数。
    • 由于每个单词 "chi" 需要一个 'c'、一个 'h' 和一个 'i',所以最多能拼凑的单词数是这三个字母出现次数的最小值。

最终代码:

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;int solution(std::string text) {// PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE// write code here// Step 1: 统计字母频率std::unordered_map<char, int> frequency;for (char c : text) {frequency[c]++;}// Step 2: 计算最多能拼凑的单词数int count_c = frequency['c'];int count_h = frequency['h'];int count_i = frequency['i'];// 计算最多能拼凑的单词数int max_words = min(count_c, min(count_h, count_i));return max_words;
}int main() {cout << (solution("chiichcc") == 2) << endl;cout << (solution("chicchcic") == 2) << endl;cout << (solution("cccchhii") == 2) << endl;return 0;
}

运行结果: 


http://www.ppmy.cn/embedded/153068.html

相关文章

如何用Python编程实现自动整理XML发票文件

传统手工整理发票耗时费力且易出错&#xff0c;而 XML 格式发票因其结构化、标准化的特点&#xff0c;为实现发票的自动化整理与保存提供了可能。本文将详细探讨用python来编程实现对 XML 格式的发票进行自动整理。 一、XML 格式发票的特点 结构化数据&#xff1a;XML 格式发票…

如何在 deepin文件夹中搜索包含特定内容、关键字的 Word 文档

在 deepin 系统中&#xff0c;搜索包含特定内容或关键字的 Word 文档是一项常见需求。以下是一个详细的步骤指南&#xff0c;帮助你在文件夹中高效地完成这项任务。 一、安装依赖工具 要搜索 Word 文档&#xff0c;首先需要安装一些必要的工具。这些工具包括 catdoc、docx2tx…

linux的shell中自定义的分隔符怎么用

在 Shell 脚本中&#xff0c;自定义分隔符可以通过多种方式使用&#xff0c;特别是在处理文件或字符串时。常见的场景包括读取以特定字符分隔的文件、设置 IFS&#xff08;内部字段分隔符&#xff09;来分割字符串等。以下是几种常见方法及其示例&#xff1a; ### 1. 使用 IFS…

HTML + CSS:如何强制div内容保持一行?

参考:https://cloud.tencent.com/developer/information/HTML%20%2B%20CSS%3A%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6div%E5%86%85%E5%AE%B9%E4%BF%9D%E6%8C%81%E4%B8%80%E8%A1%8C%EF%BC%9F 在HTML和CSS中&#xff0c;要强制让div内容保持在一行&#xff0c;可以使用以下方法&a…

sqlalchemy CreateIndex

一、CreateIndex 的工作原理&#xff1a; CreateIndex 本身只是 SQLAlchemy 中的一个构造函数&#xff0c;它只是创建了一个表示索引的对象&#xff0c;而不会直接在数据库中生成索引。要让索引在数据库中实际生成&#xff0c;需要将这个表示索引的对象通过 metadata.create_a…

框架部分面试题学习

IOC容器&#xff0c;AOP IOC &#xff1a;依赖反转&#xff0c;将对象的创建&#xff0c;组装&#xff0c;管理的控制权限从应用程序反转到IOC容器中。由springboot的来实现对象的自动装配和注入。 当某个类使用了Componnet 注解后&#xff0c;标记为一个组件。那么这个类在项…

flutter索引知识点

WidgetsFlutterBinding.ensureInitialized();初始化开启 initializeDateFormatting 本地化资源文件的加载 FileStorage 用于存储文件数据 getApplicationDocumentsDirectory() &#xff1a;获取应用文件目录(IOS和安卓通用)&#xff0c;针对 Android 设备的 AppDate 目录&am…

如何提升scrapy的效率

如何提升scrapy的效率 在settings配置文件中修改CONCURRENT_REQUESTS 100 scrapy默认开启的线程数量为32个&#xff0c;这样设置可以使其线程数量为100个在运行scrapy时,会有大量的日志信息输出&#xff0c;为了减少cpu的使用率&#xff0c;可以设置log输出信息为WORNING或者…