字节跳动-多媒体嵌入式笔试
1、将若干数组合并,降序排列。
输入描述:第一行输入正整数n,表示数组个数。
后续n行,每行代表一个数组。
数组长度和<=10e6。数组元素值<=10e9。
示例
输入:
2
[1,4,6]
[2,3,5]
输出:
[6,5,4,3,2,1]
#include <iostream> #include <vector> #include <algorithm> #include <iterator> #include <sstream> using namespace std; int main() { int n; cin >> n; cin.ignore(); // 忽略到行末,准备读取数组 vector<long long> all_elements; // 使用long long以支持大整数 string line; while (n-- > 0) { getline(cin, line); // 读取整行输入 istringstream iss(line); char bracket, comma; long long num; iss >> bracket; // 读取 '[' while (iss >> num) { // 读取每个数字 all_elements.push_back(num); iss >> comma; // 读取 ',' 或 ']' } } // 对所有元素进行降序排序 sort(all_elements.begin(), all_elements.end(), greater<long long>()); // 输出排序后的数组 cout << '['; if (!all_elements.empty()) { cout << all_elements[0]; for (size_t i = 1; i < all_elements.size(); ++i) { cout << ',' << all_elements[i]; } } cout << ']' << endl; return 0; }
2、将数组某个区间的元素各自进行翻转,希望最终所有的元素和尽可能大。
翻转就是将1234变为4321。
输入:第一行输入元素个数n,第二行输入n个正整数。
示例:
输入:
4
126 30 48 42
输出:
750(翻转 126 30 48)
#include <iostream> #include <vector> #include <algorithm> using namespace std; int reverseNumber(int num) { int rev = 0; while (num > 0) { rev = rev * 10 + num % 10; num /= 10; } return rev; } int maxSumAfterReverse(const vector<int>& nums) { int n = nums.size(); vector<int> gain(n); // 存储每个元素翻转可能带来的增益 int totalSum = 0; // 计算每个元素的原始和和翻转增益 for (int i = 0; i < n; ++i) { int reversed = reverseNumber(nums[i]); gain[i] = reversed - nums[i]; totalSum += nums[i]; } // 找到最大的增益子数组 int maxGain = 0; int currentMax = 0; for (int i = 0; i < n; ++i) {//这里其实就转换成了计算最大连续子数组的和 currentMax = std::max(gain[i], currentMax + gain[i]); maxGain = std::max(maxGain, currentMax); } // 计算可能的最大总和 return totalSum + maxGain; } int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; ++i) { cin >> nums[i]; } cout << maxSumAfterReverse(nums) << endl; return 0; }
3、给定一个仅包含“YCH”字符的字符串,每次给定一个区间,输出重排给定区间子串可以得到 多少种不同的回文串。
输入:第一行输入正整数n,q,代表字符串的长度和给定的区间个数。
第二行输入长度为n的字符串。后续q行输入两个整数表示区间l,r。
示例:
4 3
YYCC
1 2
1 4
2 3
输出:
1
2
0
#include <iostream> #include <vector> #include <string> using namespace std; const int MOD = 1000000007;//这个是题意说的不会超过这个值 // 计算阶乘和阶乘的逆元 vector<long long> fact, ifact; long long power(long long x, int y, int p) { long long res = 1; x = x % p; while (y > 0) { if (y & 1) res = (res * x)
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式学习专栏 文章被收录于专栏
7年嵌入式软、硬件开发经验,分享嵌入式软件开发相关资料,简历、工作、技术支持!!!