早教网站源码,互联网企业排名2021,江苏市场监督管理局电话,自有服务器 做网站目录 一、小R的随机播放顺序
问题描述
测试样例
解题思路#xff1a;
问题理解
数据结构选择
算法步骤
最终代码#xff1a;
运行结果#xff1a;
二、 不同整数的计数问题
问题描述
测试样例
解题思路#xff1a;
问题理解
数据结构选择
算法步骤
最终…目录 一、小R的随机播放顺序
问题描述
测试样例
解题思路
问题理解
数据结构选择
算法步骤
最终代码
运行结果
二、 不同整数的计数问题
问题描述
测试样例
解题思路
问题理解
数据结构选择
算法步骤
最终代码
运行结果编辑 一、小R的随机播放顺序
问题描述
小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌播放后将其从歌单中移除。如果歌单中还有歌曲则会将当前第一首歌移到最后一首。这个过程会一直重复直到歌单中没有任何歌曲。
例如给定歌单 [5, 3, 2, 1, 4]真实的播放顺序是 [5, 2, 4, 1, 3]。
保证歌曲中的id两两不同。 测试样例
样例1 输入n 5 ,a [5, 3, 2, 1, 4] 输出[5, 2, 4, 1, 3] 样例2 输入n 4 ,a [4, 1, 3, 2] 输出[4, 3, 1, 2] 样例3 输入n 6 ,a [1, 2, 3, 4, 5, 6] 输出[1, 3, 5, 2, 6, 4] 解题思路
问题理解
题目描述了一个特殊的随机播放规则
首先播放歌单中的第一首歌并将其从歌单中移除。如果歌单中还有歌曲则将当前第一首歌移到最后一首。重复上述过程直到歌单中没有任何歌曲。
数据结构选择
为了实现这个播放规则我们可以使用一个队列Queue来模拟歌单。队列的特点是先进先出FIFO非常适合模拟歌曲的播放顺序。
算法步骤
初始化将所有歌曲放入队列中。播放歌曲 从队列中取出第一首歌并将其加入结果列表。如果队列中还有歌曲将当前队列的第一首歌移到队列的末尾。重复重复上述步骤直到队列为空。 最终代码
#include iostream
#include vector
#include queue // 引入队列头文件std::vectorint solution(int n, std::vectorint a) {std::vectorint result; // 用于存储播放顺序std::queueint songQueue; // 用于模拟歌单的队列// 将所有歌曲放入队列中for (int song : a) {songQueue.push(song);}// 模拟播放过程while (!songQueue.empty()) {// 取出队列中的第一首歌并将其加入结果列表int currentSong songQueue.front();songQueue.pop();result.push_back(currentSong);// 如果队列中还有歌曲将当前队列的第一首歌移到队列的末尾if (!songQueue.empty()) {int nextSong songQueue.front();songQueue.pop();songQueue.push(nextSong);}}return result; // 返回最终的播放顺序
}int main() {std::vectorint result1 {5, 2, 4, 1, 3};std::vectorint result2 {4, 3, 1, 2};std::vectorint result3 {1, 3, 5, 2, 6, 4};std::cout (solution(5, {5, 3, 2, 1, 4}) result1) std::endl;std::cout (solution(4, {4, 1, 3, 2}) result2) std::endl;std::cout (solution(6, {1, 2, 3, 4, 5, 6}) result3) std::endl;
}
运行结果 二、 不同整数的计数问题
问题描述
小R有一个字符串 word该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后他希望统计在替换后剩下的整数中不同整数的数目。
例如给定字符串 a123bc34d8ef34替换后形成的字符串是 123 34 8 34剩下的整数是 123、34、8 和 34。不同的整数有三个即 123、34 和 8。
注意只有当两个整数的不含前导零的十进制表示不同才认为它们是不同的整数。 测试样例
样例1 输入word a123bc34d8ef34 输出3 样例2 输入word t1234c23456 输出2 样例3 输入word a1b01c001d4 输出2 解题思路
好的让我们来分析一下这个问题的解题思路。
问题理解
你需要处理一个由数字和小写英文字母组成的字符串目标是统计替换后剩下的不同整数的数目。具体步骤如下
字符串处理遍历字符串将非数字字符替换为空格。提取整数在遍历过程中将连续的数字字符拼接成整数。去除前导零对于提取出的整数去除前导零。去重使用集合set来存储不同的整数确保每个整数只出现一次。统计结果最终集合的大小即为不同整数的数目。
数据结构选择
集合set用于存储不同的整数自动去重。字符串string用于临时存储拼接的数字。
算法步骤
初始化创建一个集合用于存储不同的整数创建一个字符串用于临时存储数字。遍历字符串 如果当前字符是数字将其拼接到临时字符串中。如果当前字符不是数字处理临时字符串中的数字 去除前导零。将处理后的数字加入集合。清空临时字符串。处理最后一个数字遍历结束后如果临时字符串不为空处理并加入集合。返回结果集合的大小即为不同整数的数目。 最终代码
#include iostream
#include string
#include set
using namespace std;int solution(string word) {// PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE// write code heresetstring unidqueNumbers; //用集合存储不同的整数string currentNumber ; // 临时变量用来拼接数字for (char ch : word) {if (isdigit(ch)) {currentNumber ch;} else {// 如果遇到非数字字符处理当前数字if (!currentNumber.empty()) {// 去除前导零并加入到 set 中while (currentNumber.size() 1 currentNumber[0] 0) {// 表示从位置0开始删除一个字符currentNumber.erase(0, 1);}unidqueNumbers.insert(currentNumber);currentNumber ;}} }// 遇到非数字才会处理数字所以要处理字符串最后的数字if (!currentNumber.empty()) {// 去除前导零并加入到 set 中while (currentNumber.size() 1 currentNumber[0] 0) {// 表示从位置0开始删除一个字符currentNumber.erase(0, 1);}unidqueNumbers.insert(currentNumber);}return unidqueNumbers.size();
}int main() {cout (solution(a123bc34d8ef34) 3) endl;cout (solution(t1234c23456) 2) endl;cout (solution(a1b01c001d4) 2) endl;return 0;
}
运行结果