第一题:今此一役小红所向无敌
题目解析 :假设题目为 "在数组中找到唯一出现奇数次的元素"。由于其他元素出现偶数次,通过异或运算,相同元素异或为 0,0 与目标元素异或结果即为目标值。思路 :利用异或特性:a^a=0,0^a=a。遍历数组,所有元素异或后,偶数次元素抵消,结果就是目标元素。代码:
cpp
运行
cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
int result = 0;
for (int num : nums) {
result ^= num;
}
cout << result << endl;
return 0;
}
第二题:连续子数组最大的和
题目解析 :使用动态规划思想,current表示以当前元素结尾的最大子数组和,每次更新current = max(nums[i], current + nums[i]),同时用max_sum记录全局最大值。思路 :动态规划,用 current 跟踪以当前元素结尾的最大子数组和。对每个元素,选择 "只取当前元素" 或 "当前元素 + 之前的最大和",更新 current 后,用 max_sum 记录全局最大值。代码:
cpp
运行
cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
int max_sum = nums[0], current = nums[0];
for (int i = 1; i < n; ++i) {
current = max(nums[i], current + nums[i]);
max_sum = max(max_sum, current);
}
cout << max_sum << endl;
return 0;
}
第三题:非对称之美
题目解析 :假设题目为 "判断字符串是否为非回文串",即字符串正序与逆序不相同。通过反转字符串后与原字符串比较,不等则为 "非对称"。思路 :若判断字符串非对称,反转字符串后与原串比较,若不同则为非对称。若题目是数组非对称,可比较数组与反转数组是否不同,或判断是否存在 i 使 nums i≠nums n-1-i。代码:
cpp
运行
cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
cin >> s;
string reversed_s = s;
reverse(reversed_s.begin(), reversed_s.end());
cout << (s != reversed_s ? "Yes" : "No") << endl;
return 0;
}
谢谢