字节跳动-多媒体嵌入式笔试
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年嵌入式软、硬件开发经验,分享嵌入式软件开发相关资料,简历、工作、技术支持!!!


查看5道真题和解析